From 341dc4d0c78627ca5c8a8cc6a733ef68da1c1884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?= <aurelien.lamercerie@laposte.net> Date: Thu, 30 Sep 2021 23:24:49 +0200 Subject: [PATCH] Update typing of composite list --- config/semantic-net.ttl | 14 +- config/transduction-schemes.ttl | 295 ++++++++++++++++---------------- 2 files changed, 158 insertions(+), 151 deletions(-) diff --git a/config/semantic-net.ttl b/config/semantic-net.ttl index 576e036d..ce40e75b 100644 --- a/config/semantic-net.ttl +++ b/config/semantic-net.ttl @@ -130,9 +130,9 @@ net:has_instance rdfs:label "entity instance" ; rdfs:subPropertyOf net:objectValue ; . -net:has_mainClass +net:has_item rdf:type rdf:Property ; - rdfs:label "has main class" ; + rdfs:label "has item" ; rdfs:subPropertyOf net:has_object ; . net:has_mother_class @@ -150,6 +150,11 @@ net:has_object rdfs:label "relation" ; rdfs:subPropertyOf net:netProperty ; . +net:has_parent + rdf:type rdf:Property ; + rdfs:label "has parent" ; + rdfs:subPropertyOf net:has_object ; +. net:has_parent_class rdf:type rdf:Property ; rdfs:label "parent class" ; @@ -170,11 +175,6 @@ net:has_structure rdfs:label "Linguistic Structure (in UNL Document)" ; rdfs:subPropertyOf net:netProperty ; . -net:has_subClass - rdf:type rdf:Property ; - rdfs:label "has sub class" ; - rdfs:subPropertyOf net:has_object ; -. net:has_target rdf:type rdf:Property ; rdfs:label "has target" ; diff --git a/config/transduction-schemes.ttl b/config/transduction-schemes.ttl index c57a2119..cbc29dc4 100644 --- a/config/transduction-schemes.ttl +++ b/config/transduction-schemes.ttl @@ -57,15 +57,17 @@ CONSTRUCT { ?mainInstanceUri rdf:type ?subEntity23Uri. } WHERE { - # net1: entity class list + # net1: Composite List ?net1 a net:Instance. - ?net1 net:type net:entity_class_list. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. + # -- old --- ?net1 net:type net:entity_class_list. ?net1 net:has_structure ?req. ?net1 net:entityClass ?entityClass. ?net1 net:has_node ?uw2, ?uw3. - ?net1 net:has_mainClass ?mainEntityObject. + ?net1 net:has_parent ?mainEntityObject. ?mainEntityObject net:has_concept ?mainEntity. - ?net1 net:has_subClass ?subEntityObject2, ?subEntityObject3. + ?net1 net:has_item ?subEntityObject2, ?subEntityObject3. ?subEntityObject2 net:concept ?subEntity2. ?subEntityObject2 net:has_node ?uw2. ?subEntityObject3 net:has_concept ?subEntity3. @@ -124,15 +126,17 @@ CONSTRUCT { ?mainInstanceUri rdf:type ?subEntity23Uri. } WHERE { - # net1: entity class list + # net1: Composite List ?net1 a net:Instance. - ?net1 net:type net:entity_class_list. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. + # -- old --- ?net1 net:type net:entity_class_list. ?net1 net:has_structure ?req. ?net1 net:entityClass ?entityClass. ?net1 net:has_node ?uw2, ?uw3. - ?net1 net:has_mainClass ?mainEntityObject. + ?net1 net:has_parent ?mainEntityObject. ?mainEntityObject net:has_concept ?mainEntity. - ?net1 net:has_subClass ?subEntityObject2, ?subEntityObject3. + ?net1 net:has_item ?subEntityObject2, ?subEntityObject3. ?subEntityObject2 net:has_concept ?subEntity2. ?subEntityObject2 net:has_node ?uw2. ?subEntityObject3 net:has_concept ?subEntity3. @@ -235,56 +239,6 @@ WHERE { }""" ; sh:order 3.1 ; . -cts:add-list-of-entity-classes - rdf:type sh:SPARQLRule ; - sh:construct """PREFIX owl: <http://www.w3.org/2002/07/owl#> -PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> -PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> -PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> -PREFIX unl: <https://unl.tetras-libre.fr/rdf/schema#> -PREFIX net: <https://unsel.tetras-libre.fr/tenet/semantic-net#> -PREFIX cprm: <https://unsel.tetras-libre.fr/tenet/config/parameters#> -PREFIX req: <https://unsel.tetras-libre.fr/tenet/frame/requirement-ontology#> -PREFIX sys: <https://unsel.tetras-libre.fr/tenet/frame/system-ontology/> -PREFIX fprm: <https://unsel.tetras-libre.fr/tenet/frame/parameters#> - -# -- Add Entity classes in System Ontology -CONSTRUCT { - # Classification - ?subEntityUri rdfs:subClassOf ?mainEntityUri. - ?subEntityUri rdfs:label ?subEntity. - ?subEntityUri sys:from_structure ?req. - # -- old --- ?mainEntityUri rdfs:subClassOf ?entityUri. - # -- old --- ?mainEntityUri rdfs:label ?mainEntity. - # Instantiation (extension) - ?mainInstanceUri rdf:type ?subEntityUri. - ?mainInstanceUri sys:from_structure ?req. -} -WHERE { - # net1: entity class list - ?net1 a net:Instance. - ?net1 net:type net:entity_class_list. - ?net1 net:has_structure ?req. - ?net1 net:entityClass ?entityClass. - ?net1 net:has_mainClass ?mainEntityObject. - ?mainEntityObject net:has_concept ?mainEntity. - ?net1 net:has_subClass ?subEntityObject. - ?subEntityObject net:has_concept ?subEntity. - ?subEntityObject net:has_instance ?mainInstance. - # Filter -- old --- FILTER NOT EXISTS { ?net2 net:has_subClass ?mainEntity} - # URI (for classes) - sys:Structure sys:has_frame_uri ?frameURI. - BIND (concat( ?frameURI, ?entityClass) AS ?s1). - BIND (concat(?s1, '#', ?mainEntity) AS ?s2). - BIND (concat(?s1, '#', ?subEntity) AS ?s3). - BIND (uri(?s2) AS ?mainEntityUri). - BIND (uri(?s3) AS ?subEntityUri). - # URI (for instance) - BIND (concat(?s1, '_', ?mainInstance) AS ?s4). - BIND (uri(?s4) AS ?mainInstanceUri). -}""" ; - sh:order 3.2 ; -. cts:add-state-property rdf:type sh:SPARQLRule ; rdfs:label "add-event" ; @@ -382,10 +336,9 @@ cts:batch_execution sh:rule cts:add-conjunctive-entity-classes ; sh:rule cts:add-disjunctive-entity-classes ; sh:rule cts:add-event ; - sh:rule cts:add-list-of-entity-classes ; sh:rule cts:add-state-property ; sh:rule cts:bypass-reification ; - sh:rule cts:complement-list-of-entity-classes ; + sh:rule cts:complement-composite-class ; sh:rule cts:compose-agt-verb-obj-as-simple-event ; sh:rule cts:compose-aoj-verb-obj-as-simple-state-property ; sh:rule cts:compose-atom-with-list-by-mod-1 ; @@ -400,6 +353,7 @@ cts:batch_execution sh:rule cts:extend-list-net ; sh:rule cts:generate-atom-class ; sh:rule cts:generate-atom-instance ; + sh:rule cts:generate-composite-class-from-list-net ; sh:rule cts:init-conjunctive-list-net ; sh:rule cts:init-disjunctive-list-net ; sh:rule cts:instantiate-atom-net ; @@ -436,7 +390,7 @@ WHERE { } """ ; sh:order 1.1 ; . -cts:complement-list-of-entity-classes +cts:complement-composite-class rdf:type sh:SPARQLRule ; sh:construct """PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -457,9 +411,10 @@ CONSTRUCT { WHERE { # net1: entity class list ?net1 a net:Instance. - ?net1 net:type net:entity_class_list. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. ?net1 net:entityClass ?entityClass. - ?net1 net:has_subClass ?subEntityObject. + ?net1 net:has_item ?subEntityObject. ?subEntityObject net:has_concept ?subEntity. ?subEntityObject net:has_feature ?featureObject. # object: feature @@ -639,30 +594,24 @@ PREFIX fprm: <https://unsel.tetras-libre.fr/tenet/frame/parameters#> # -- Compose an atom net and a list net (with distinct item classes) CONSTRUCT { - # Object: composite (A) - ?newObject12 a net:Object. - ?newObject12 net:objectType net:composite. - ?newObject12 net:has_node ?uw1, ?uw2. - ?newObject12 net:has_mother_class ?net1Mother. - # -- TODO --- ?newObject12 net:has_parent_class ?net1Class. - ?newObject12 net:has_concept ?subConceptA. - ?newObject12 net:has_feature ?net2ItemA. - # Object: composite (B) - ?newObject13 a net:Object. - ?newObject13 net:objectType net:composite. - ?newObject13 net:has_node ?uw1, ?uw3. - ?newObject13 net:has_mother_class ?net1Mother. - # -- TODO --- ?newObject13 net:has_parent_class ?net1Class. - ?newObject13 net:has_concept ?subConceptB. - ?newObject13 net:has_feature ?net2ItemB. - # Net: Entity ClassList + # Object: Composite + ?newObject a net:Object. + ?newObject net:objectType net:composite. + ?newObject net:has_node ?uw1, ?uw3. + ?newObject net:has_mother_class ?net1Mother. + # -- TODO --- ?newObject net:has_parent_class ?net1Class. + ?newObject net:has_concept ?subConcept. + ?newObject net:has_feature ?net2Item. + # Net: Composite List ?newNet a net:Instance. - ?newNet net:type net:entity_class_list. + ?newNet net:type net:list. + ?newNet net:type ?listSubType. + ?newNet net:listOf net:composite. ?newNet net:has_structure ?req. ?newNet net:has_node ?uw1, ?uw2, ?uw3. ?newNet net:entityClass ?net1ParentClass. - ?newNet net:has_mainClass ?net1Object. - ?newNet net:has_subClass ?newObject12, ?newObject13. + ?newNet net:has_parent ?net1Object. + ?newNet net:has_item ?newObject. } WHERE { # net1: atom @@ -679,36 +628,33 @@ WHERE { # net2: list ?net2 a net:Instance. ?net2 net:type net:list. - ?net2 net:listOf ?listItemClass. + ?net2 net:type ?listSubType. + ?net2 net:listOf net:atom. ?net2 net:has_structure ?req. ?net2 net:has_node ?uw2, ?uw3. - ?net2 net:has_item ?net2ItemA. - ?net2ItemA net:has_node ?uw2. - ?net2ItemA net:has_concept ?net2ConceptA. - ?net2 net:has_item ?net2ItemB. - ?net2ItemB net:has_node ?uw3. - ?net2ItemB net:has_concept ?net2ConceptB. + ?net2 net:has_item ?net2Item. + ?net2Item net:has_node ?uw3. + ?net2Item net:has_parent_class ?net2ParentClass. + ?net2Item net:has_concept ?net2Concept. # Filter FILTER NOT EXISTS { ?net2 net:has_node ?uw1 }. - FILTER ( ?net1ParentClass != ?listItemClass ). + FILTER ( ?net1ParentClass != ?net2ParentClass ). # Label: Id, concept ?uw1 unl:has_id ?uw1Id. ?uw2 unl:has_id ?uw2Id. ?uw3 unl:has_id ?uw3Id. - BIND (concat( ?net2ConceptA, '_', ?net1Concept) AS ?subConceptA). - BIND (concat( ?net2ConceptB, '_', ?net1Concept) AS ?subConceptB). + BIND (concat( ?net2Concept, '_', ?net1Concept) AS ?subConcept). # URI (for Object) cprm:Config_Parameters cprm:netURI ?netURI. cprm:Config_Parameters cprm:objectRef ?objectRef. BIND (concat( ?netURI, ?objectRef) AS ?o1). - BIND (concat(?o1, ?uw1Id, '-', ?uw2Id) AS ?o2). - BIND (concat(?o1, ?uw1Id, '-', ?uw3Id) AS ?o3). - BIND (uri(?o2) AS ?newObject12). - BIND (uri(?o3) AS ?newObject13). - # URI (for ClassList Net) + BIND (concat(?o1, ?uw1Id, '-', ?uw3Id) AS ?o2). + BIND (uri(?o2) AS ?newObject). + # URI (for List Net) cprm:Config_Parameters cprm:netURI ?netURI. - net:class_list rdfs:label ?classListLabel. - BIND (concat( ?netURI, ?classListLabel, '_') AS ?n1). + net:list rdfs:label ?listLabel. + net:composite rdfs:label ?compositeLabel. + BIND (concat( ?netURI, ?listLabel, '_', ?compositeLabel, '_') AS ?n1). BIND (concat(?n1, ?uw1Id, '-', ?uw2Id) AS ?n2). BIND (uri(?n2) AS ?newNet). }""" ; @@ -729,14 +675,16 @@ PREFIX fprm: <https://unsel.tetras-libre.fr/tenet/frame/parameters#> # -- Compose an atom net and an list net (with same item classes) CONSTRUCT { - # Net: Entity ClassList + # Net: Composite List ?newNet a net:Instance. - ?newNet net:type net:entity_class_list. + ?newNet net:type net:list. + ?newNet net:type ?listSubType. + ?newNet net:listOf net:composite. ?newNet net:has_structure ?req. ?newNet net:has_node ?uw1, ?uw2, ?uw3. ?newNet net:entityClass ?net1ParentClass. - ?newNet net:has_mainClass ?net1Object. - ?newNet net:has_subClass ?object2, ?object3. + ?newNet net:has_parent ?net1Object. + ?newNet net:has_item ?net2Item. } WHERE { # net1: atom @@ -751,23 +699,27 @@ WHERE { # net2: list ?net2 a net:Instance. ?net2 net:type net:list. - ?net2 net:listOf ?listItemClass. + ?net2 net:listOf net:atom. ?net2 net:has_structure ?req. ?net2 net:has_node ?uw2, ?uw3. - ?net2 net:has_item ?object2, ?object3. + ?net2 net:has_item ?net2Item. + ?net2Item net:has_node ?uw3. + ?net2Item net:has_parent_class ?net2ParentClass. + ?net2Item net:has_concept ?net2Concept. # Filter - FILTER ( ?uw1 != ?uw3 ). - FILTER ( ?net1ParentClass = ?listItemClass ). + FILTER NOT EXISTS { ?net2 net:has_node ?uw1 }. + FILTER ( ?net1ParentClass = ?net2ParentClass ). # Label: Id, subEntity ?uw1 unl:has_id ?uw1Id. ?uw2 unl:has_id ?uw2Id. ?uw3 unl:has_id ?uw3Id. - # URI (for ClassList Net) + # URI (for List Net) cprm:Config_Parameters cprm:netURI ?netURI. - net:class_list rdfs:label ?classListLabel. - BIND (concat( ?netURI, ?classListLabel, '_') AS ?s1). - BIND (concat(?s1, ?uw1Id, '-', ?uw2Id) AS ?s2). - BIND (uri(?s2) AS ?newNet). + net:list rdfs:label ?listLabel. + net:composite rdfs:label ?compositeLabel. + BIND (concat( ?netURI, ?listLabel, '_', ?compositeLabel, '_') AS ?n1). + BIND (concat(?n1, ?uw1Id, '-', ?uw2Id) AS ?n2). + BIND (uri(?n2) AS ?newNet). }""" ; sh:order 2.33 ; . @@ -1032,7 +984,7 @@ CONSTRUCT { ?newNet a net:Instance. ?newNet net:type net:list. ?newNet net:type net:unary_list. - ?newNet net:listOf ?net1ParentClass. + ?newNet net:listOf net:atom. ?newNet net:has_structure ?req. ?newNet net:has_node ?uw1. ?newNet net:has_item ?object1. @@ -1057,9 +1009,8 @@ WHERE { ?uw1 unl:has_id ?uw1Id. cprm:Config_Parameters cprm:netURI ?netURI. net:list rdfs:label ?listLabel. - BIND (strbefore(?uw1Label, '(') AS ?concept1). - # -- old --- BIND (strbefore(?uw2Label, '(') AS ?concept2). - BIND (concat( ?netURI, ?listLabel, '_') AS ?s1). + net:atom rdfs:label ?atomLabel. + BIND (concat( ?netURI, ?listLabel, '_', ?atomLabel, '_') AS ?s1). BIND (concat(?s1, ?uw1Id) AS ?s2). BIND (uri(?s2) AS ?newNet). }""" ; @@ -1191,8 +1142,12 @@ WHERE { ?net1 net:has_atom ?atomObject1. ?atomObject1 net:has_parent_class ?atomParentClass. ?atomObject1 net:has_concept ?atomConcept. - # Filter: entity not present in a class list - FILTER NOT EXISTS { ?net2 net:has_subClass ?atomObject1} + # Filter: atom not present in a composite list + FILTER NOT EXISTS { + ?net2 net:type net:list. + ?net2 net:listOf net:composite. + ?net2 net:has_item ?atomObject1. + } # URI: class sys:Structure sys:has_frame_uri ?frameURI. BIND (concat( ?frameURI, ?atomParentClass) AS ?s1). @@ -1247,6 +1202,57 @@ WHERE { }""" ; sh:order 3.1 ; . +cts:generate-composite-class-from-list-net + rdf:type sh:SPARQLRule ; + sh:construct """PREFIX owl: <http://www.w3.org/2002/07/owl#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> +PREFIX unl: <https://unl.tetras-libre.fr/rdf/schema#> +PREFIX net: <https://unsel.tetras-libre.fr/tenet/semantic-net#> +PREFIX cprm: <https://unsel.tetras-libre.fr/tenet/config/parameters#> +PREFIX req: <https://unsel.tetras-libre.fr/tenet/frame/requirement-ontology#> +PREFIX sys: <https://unsel.tetras-libre.fr/tenet/frame/system-ontology/> +PREFIX fprm: <https://unsel.tetras-libre.fr/tenet/frame/parameters#> + +# -- Add Entity classes in System Ontology +CONSTRUCT { + # Classification + ?subEntityUri rdfs:subClassOf ?mainEntityUri. + ?subEntityUri rdfs:label ?subEntity. + ?subEntityUri sys:from_structure ?req. + # -- old --- ?mainEntityUri rdfs:subClassOf ?entityUri. + # -- old --- ?mainEntityUri rdfs:label ?mainEntity. + # Instantiation (extension) + ?mainInstanceUri rdf:type ?subEntityUri. + ?mainInstanceUri sys:from_structure ?req. +} +WHERE { + # net1: Composite List + ?net1 a net:Instance. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. + ?net1 net:has_structure ?req. + ?net1 net:entityClass ?entityClass. + ?net1 net:has_parent ?mainEntityObject. + ?mainEntityObject net:has_concept ?mainEntity. + ?net1 net:has_item ?subEntityObject. + ?subEntityObject net:has_concept ?subEntity. + ?subEntityObject net:has_instance ?mainInstance. + # Filter -- old --- FILTER NOT EXISTS { ?net2 net:has_subClass ?mainEntity} + # URI (for classes) + sys:Structure sys:has_frame_uri ?frameURI. + BIND (concat( ?frameURI, ?entityClass) AS ?s1). + BIND (concat(?s1, '#', ?mainEntity) AS ?s2). + BIND (concat(?s1, '#', ?subEntity) AS ?s3). + BIND (uri(?s2) AS ?mainEntityUri). + BIND (uri(?s3) AS ?subEntityUri). + # URI (for instance) + BIND (concat(?s1, '_', ?mainInstance) AS ?s4). + BIND (uri(?s4) AS ?mainInstanceUri). +}""" ; + sh:order 3.2 ; +. cts:generation rdf:type owl:Class ; rdf:type sh:NodeShape ; @@ -1255,15 +1261,15 @@ cts:generation sh:rule cts:add-conjunctive-entity-classes ; sh:rule cts:add-disjunctive-entity-classes ; sh:rule cts:add-event ; - sh:rule cts:add-list-of-entity-classes ; sh:rule cts:add-state-property ; - sh:rule cts:complement-list-of-entity-classes ; + sh:rule cts:complement-composite-class ; sh:rule cts:compute-class-uri-of-net-object ; sh:rule cts:compute-domain-range-of-event-object-properties ; sh:rule cts:compute-domain-range-of-state-property-object-properties ; sh:rule cts:compute-instance-uri-of-net-object ; sh:rule cts:generate-atom-class ; sh:rule cts:generate-atom-instance ; + sh:rule cts:generate-composite-class-from-list-net ; . cts:init-conjunctive-list-net rdf:type sh:SPARQLRule ; @@ -1283,7 +1289,7 @@ CONSTRUCT { ?newNet a net:Instance. ?newNet net:type net:list. ?newNet net:type net:conjunctive_list. - ?newNet net:listOf ?net1ParentClass. + ?newNet net:listOf net:atom. ?newNet net:has_structure ?req. ?newNet net:has_node ?uw1. ?newNet net:has_item ?object1. @@ -1307,9 +1313,8 @@ WHERE { ?uw1 unl:has_id ?uw1Id. cprm:Config_Parameters cprm:netURI ?netURI. net:list rdfs:label ?listLabel. - BIND (strbefore(?uw1Label, '(') AS ?concept1). - # -- old --- BIND (strbefore(?uw2Label, '(') AS ?concept2). - BIND (concat( ?netURI, ?listLabel, '_') AS ?s1). + net:atom rdfs:label ?atomLabel. + BIND (concat( ?netURI, ?listLabel, '_', ?atomLabel, '_') AS ?s1). BIND (concat(?s1, ?uw1Id) AS ?s2). BIND (uri(?s2) AS ?newNet). }""" ; @@ -1333,7 +1338,7 @@ CONSTRUCT { ?newNet a net:Instance. ?newNet net:type net:list. ?newNet net:type net:disjunctive_list. - ?newNet net:listOf ?net1ParentClass. + ?newNet net:listOf net:atom. ?newNet net:has_structure ?req. ?newNet net:has_node ?uw1. ?newNet net:has_item ?object1. @@ -1357,9 +1362,8 @@ WHERE { ?uw1 unl:has_id ?uw1Id. cprm:Config_Parameters cprm:netURI ?netURI. net:list rdfs:label ?listLabel. - BIND (strbefore(?uw1Label, '(') AS ?concept1). - # -- old --- BIND (strbefore(?uw2Label, '(') AS ?concept2). - BIND (concat( ?netURI, ?listLabel, '_') AS ?s1). + net:atom rdfs:label ?atomLabel. + BIND (concat( ?netURI, ?listLabel, '_', ?atomLabel, '_') AS ?s1). BIND (concat(?s1, ?uw1Id) AS ?s2). BIND (uri(?s2) AS ?newNet). }""" ; @@ -1416,17 +1420,18 @@ PREFIX fprm: <https://unsel.tetras-libre.fr/tenet/frame/parameters#> # -- Instantiate composite in list by extension of instances from parent element CONSTRUCT { - ?subObject2 net:has_instance ?parentInstance. + ?itemObject net:has_instance ?parentInstance. } WHERE { - # net2: list of composite items - ?net2 a net:Instance. - ?net2 net:type net:entity_class_list. - ?net2 net:has_mainClass ?parentObject. + # net1: Composite List + ?net1 a net:Instance. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. + ?net1 net:has_parent ?parentObject. ?parentObject net:has_instance ?parentInstance. - ?net2 net:has_subClass ?subObject2. + ?net1 net:has_item ?itemObject. # Filter - FILTER NOT EXISTS { ?subObject2 net:has_instance ?anyInstance } . + FILTER NOT EXISTS { ?itemObject net:has_instance ?anyInstance } . }""" ; sh:order 2.341 ; . @@ -1448,21 +1453,23 @@ CONSTRUCT { ?net2SubObject net:has_instance ?parentInstance. } WHERE { - # net1: list of composite items + # net1: Composite Liste ?net1 a net:Instance. - ?net1 net:type net:entity_class_list. + ?net1 net:type net:list. + ?net1 net:listOf net:composite. ?net1 net:has_structure ?sameReq. - ?net1 net:has_mainClass ?parentObject. + ?net1 net:has_parent ?parentObject. ?parentObject net:has_instance ?parentInstance. - ?net1 net:has_subClass ?net1SubObject. + ?net1 net:has_item ?net1SubObject. ?net1SubObject net:has_concept ?sameEntity. - # net2: another list + # net2: Another List ?net2 a net:Instance. - ?net2 net:type net:entity_class_list. + ?net2 net:type net:list. + ?net2 net:listOf net:composite. ?net2 net:has_structure ?sameReq. - ?net2 net:has_mainClass ?net2MainObject. + ?net2 net:has_parent ?net2MainObject. ?net2MainObject net:has_concept ?sameEntity. - ?net2 net:has_subClass ?net2SubObject. + ?net2 net:has_item ?net2SubObject. # Filter FILTER NOT EXISTS { ?net2SubObject net:has_instance ?anyInstance } . }""" ; -- GitLab