Skip to content
Snippets Groups Projects
Commit 74287ed8 authored by Eliott Sammier's avatar Eliott Sammier
Browse files

Add inference for transitive rdfs:subClassOf

parent 9ee2e5d1
Branches
Tags
No related merge requests found
......@@ -9,10 +9,13 @@
owl:imports <http://www.semanticweb.org/eliott/ontologies/2024/4/macao> .
:Image a owl:Class ;
rdfs:subClassOf :MacaoRessource .
rdfs:subClassOf :MacaoObject,
:MacaoRessource .
:SimpleFlash a owl:Class ;
rdfs:subClassOf :FlashObject .
rdfs:subClassOf :FlashObject,
:MacaoObject,
:MacaoRessource .
:aReponse a owl:ObjectProperty ;
rdfs:range :Reponse .
......@@ -86,7 +89,8 @@
owl:versionInfo 1.1 .
:FlashObject a owl:Class ;
rdfs:subClassOf :MacaoRessource .
rdfs:subClassOf :MacaoObject,
:MacaoRessource .
:MosMod951 a :Module,
owl:NamedIndividual ;
......@@ -5769,8 +5773,6 @@
:titre "Choisir une transcription (5)" ;
rdfs:subClassOf :MosEtp644 .
:MacaoObject a owl:Class .
:MacaoRoot a owl:Class .
:MosMod34 a :Module,
......@@ -5868,9 +5870,6 @@
:titre "Spécificité des voyelles (2)" ;
rdfs:subClassOf :MosEtp171 .
:MacaoRessource a owl:Class ;
rdfs:subClassOf :MacaoObject .
:pg313 a :ExerciceQC,
:ExerciceQC_QCU,
:Page,
......@@ -5999,13 +5998,13 @@
:titre "Lire des transcriptions phonétiques (3)" ;
rdfs:subClassOf :MosEtp746 .
:Exercice a owl:Class ;
rdfs:subClassOf :Page .
:ExerciceGD a owl:Class ;
rdfs:subClassOf :Exercice .
rdfs:subClassOf :Exercice,
:MacaoContenu,
:MacaoObject,
:Page .
:MacaoContenu a owl:Class ;
:MacaoRessource a owl:Class ;
rdfs:subClassOf :MacaoObject .
:MosEtp558 a :SousPartie,
......@@ -6035,6 +6034,11 @@
:titre "> Reconnaître les marques de l'accentuation" ;
rdfs:subClassOf :MosMod60 .
:Exercice a owl:Class ;
rdfs:subClassOf :MacaoContenu,
:MacaoObject,
:Page .
:MosEtp555 a :SousPartie,
owl:NamedIndividual ;
rdfs:label "Quelques définitions" ;
......@@ -6051,10 +6055,17 @@
rdfs:subClassOf :MosMod39 .
:ExerciceQC_QCM a owl:Class ;
rdfs:subClassOf :ExerciceQC .
rdfs:subClassOf :Exercice,
:ExerciceQC,
:MacaoContenu,
:MacaoObject,
:Page .
:ExerciceQM a owl:Class ;
rdfs:subClassOf :Exercice .
rdfs:subClassOf :Exercice,
:MacaoContenu,
:MacaoObject,
:Page .
:MosMod39 a :Module,
owl:NamedIndividual ;
......@@ -6450,7 +6461,8 @@
rdfs:subClassOf :MosEtp746 .
:Module a owl:Class ;
rdfs:subClassOf :MacaoContenu .
rdfs:subClassOf :MacaoContenu,
:MacaoObject .
:MosEtp335 a :SousPartie,
owl:NamedIndividual ;
......@@ -6472,7 +6484,13 @@
rdfs:subClassOf :MosMod34 .
:ExerciceTAT a owl:Class ;
rdfs:subClassOf :Exercice .
rdfs:subClassOf :Exercice,
:MacaoContenu,
:MacaoObject,
:Page .
:MacaoContenu a owl:Class ;
rdfs:subClassOf :MacaoObject .
:MosEtp129 a :SousPartie,
owl:NamedIndividual ;
......@@ -6646,6 +6664,8 @@
:titre "> Utiliser les marques de l'accentuation" ;
rdfs:subClassOf :MosMod60 .
:MacaoObject a owl:Class .
:MosEtp210 a :SousPartie,
owl:NamedIndividual ;
rdfs:label "> Reconnaître les auxiliaires" ;
......@@ -6673,7 +6693,8 @@
rdfs:subClassOf :MosMod34 .
:SousPartie a owl:Class ;
rdfs:subClassOf :MacaoContenu .
rdfs:subClassOf :MacaoContenu,
:MacaoObject .
:MosEtp171 a :SousPartie,
owl:NamedIndividual ;
......@@ -6738,19 +6759,30 @@
rdfs:subClassOf :MosMod341 .
:ExerciceQC_QCU a owl:Class ;
rdfs:subClassOf :ExerciceQC .
rdfs:subClassOf :Exercice,
:ExerciceQC,
:MacaoContenu,
:MacaoObject,
:Page .
:ExerciceQC a owl:Class ;
rdfs:subClassOf :Exercice .
rdfs:subClassOf :Exercice,
:MacaoContenu,
:MacaoObject,
:Page .
:Cours a owl:Class ;
rdfs:subClassOf :Page .
rdfs:subClassOf :MacaoContenu,
:MacaoObject,
:Page .
:Page a owl:Class ;
rdfs:subClassOf :MacaoContenu .
rdfs:subClassOf :MacaoContenu,
:MacaoObject .
:Reponse a owl:Class ;
rdfs:subClassOf :MacaoContenu .
rdfs:subClassOf :MacaoContenu,
:MacaoObject .
[] a owl:AllDisjointClasses ;
owl:members ( :ExerciceGD :ExerciceQC :ExerciceQM :ExerciceTAT ) .
......
......@@ -7,11 +7,23 @@ def construct(g: Graph, query: str):
"""Performs a SPARQL `CONSTRUCT` query and add the resulting triples
to the graph, in-place.
"""
res = g.query(query)
if res.graph is not None:
g += res.graph
def construct_while(g: Graph, query: str):
"""Repeat a CONSTRUCT query, adding triples to the graph, until the query
stops generating new triples"""
while True:
res = g.query(query)
if res.graph is not None and len(res.graph - g) > 0:
g += res.graph
else:
break
def main():
# Load graph
graph = Graph()
......@@ -33,4 +45,32 @@ def main():
}""",
)
# Apply property 'subClassOf' transitively, except on the "fake" class
# hierarchy based on MacaoRoot
q_transitive_subclass = """
CONSTRUCT {
?a rdfs:subClassOf ?c
} WHERE {
?a rdfs:subClassOf ?b .
?b rdfs:subClassOf ?c .
?b rdfs:subClassOf :MacaoObject
FILTER(?a != owl:Nothing && ?c != owl:Thing)
}
"""
construct_while(graph, q_transitive_subclass)
# construct(
# graph,
# """
# CONSTRUCT {
# } WHERE {
# ?subj a ?child_type .
# ?child_type rdfs:subClassOf ?parent_type
# }
# """,
# )
# Save the full graph
graph.serialize(RDF_FULL_FILE, "turtle", base=NS)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment