¶
16.14.11. Inference Rules, OWL Support and Relationship Ontology
This section provides queries usage for inference rules, owl support and Relationship Vocabulary.
¶
Example 1
Example based on Relationship Vocab:
## Verify Ontology Data is in Quad Store ## Ontology: <http://vocab.org/relationship/> (Relationship Ontology) ## Use pragma to put latest in Quad store. DEFINE get:soft "replace" SELECT * FROM <http://vocab.org/relationship/> WHERE {?s ?p ?o} ## Clean up CLEAR GRAPH <urn:owl.tests> ## Create Instance Data for Relationship Ontology PREFIX rel: <http://purl.org/vocab/relationship/> INSERT into GRAPH <urn:owl.tests> { <http://dbpedia.org/resource/Prince_William_of_Wales> rel:siblingOf <http://dbpedia.org/resource/Prince_Harry_of_Wales>. <http://dbpedia.org/resource/Elizabeth_Bowes-Lyon> rel:ancestorOf <http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom>. <http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom> rel:ancestorOf <http://dbpedia.org/resource/Charles%2C_Prince_of_Wales>. <http://dbpedia.org/resource/Charles%2C_Prince_of_Wales> rel:ancestorOf <http://dbpedia.org/resource/Prince_William_of_Wales>. }; ## Verify SELECT * FROM <urn:owl.tests> WHERE { ?s ?p ?o } ## Create an Inference Rule that references the Relationship Ontology Named Graph rdfs_rule_set ('urn:owl.tests', 'http://vocab.org/relationship') ; ## Verify Rule's existence SELECT * FROM SYS_RDF_SCHEMA ;
¶
Example 2
## Test owl:TransitiveProperty Reasoning ## Start with a specific URI ## Goal: See inferred Triples ## In this case, relationship between: <http://dbpedia.org/resource/Elizabeth_Bowes-Lyon> ## and her descendants: Queen Elizabeth, Prince Charles, Prince William, and Prince Harry) DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> SELECT * FROM <urn:owl.tests> WHERE { <http://dbpedia.org/resource/Elizabeth_Bowes-Lyon> rel:ancestorOf ?o }
¶
Example 3
## Test owl:SymmetricalProperty Reasoning ## Should show same result irrespective of rel:siblingOf URI in Subject or Object slots of Triple DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT * FROM <urn:owl.tests> WHERE { <http://dbpedia.org/resource/Prince_William_of_Wales> rel:siblingOf ?o } ## OR DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT * FROM <urn:owl.tests> WHERE { ?s rel:siblingOf <http://dbpedia.org/resource/Prince_William_of_Wales> }
¶
Example 4
## Test owl:inverseOf Reasoning ## Should show triples exposing the inverseOf relation. ## In this case rel:ancestorOf instance data triples exist,so the system must infer rel:descendant Of triples DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> SELECT * FROM <urn:owl.tests> WHERE { <http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom> rel:descendantOf ?o } ## OR with Transitivity Option applied DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> SELECT * FROM <urn:owl.tests> WHERE { <http://dbpedia.org/resource/Prince_William_of_Wales> rel:descendantOf ?o OPTION (T_DISTINCT) }
¶
Example 5
## Test owl:inverseOf Reasoning ## Should show triples exposing the inverseOf relation. ## In this case rel:employedBy instance data triples exist, ## the system must infer rel:employerOf triples. DEFINE input:inference 'urn:owl.tests' PREFIX rel: <http://purl.org/vocab/relationship/> SELECT * FROM <urn:owl.tests> WHERE { ?s rel:employerOf ?o }
¶
Example 6
Example based on Relationship Vocab and SKOS
Assume the following test10.rdf file:
<?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:daml="http://www.daml.org/2001/03/daml+oil#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:turnguard="http://www.turnguard.com#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sea="http://www.2sea.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:dct="http://purl.org/dc/terms/"> <rdf:Description rdf:about="http://www.turnguard.com/Music"> <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/> <skos:prefLabel xml:lang="en">Music</skos:prefLabel> <skos:narrower rdf:resource="http://www.turnguard.com/Pop" /> </rdf:Description> <rdf:Description rdf:about="http://www.turnguard.com/Pop"> <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/> <skos:prefLabel xml:lang="en">POP</skos:prefLabel> <skos:narrower rdf:resource="http://www.turnguard.com/TechnoPop" /> </rdf:Description> <rdf:Description rdf:about="http://www.turnguard.com/TechnoPop"> <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/> <skos:prefLabel xml:lang="en">TECHNOPOP</skos:prefLabel> <skos:narrower rdf:resource="http://www.turnguard.com/ElectroPop" /> </rdf:Description> <rdf:Description rdf:about="http://www.turnguard.com/ElectroPop"> <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/> <skos:prefLabel xml:lang="en">ELECTROPOP</skos:prefLabel> </rdf:Description> <rdf:Description rdf:about="http://www.turnguard.com/KrautRock"> <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/> <skos:prefLabel xml:lang="en">KrautRock</skos:prefLabel> <skos:related rdf:resource="http://www.turnguard.com/ElectroPop" /> </rdf:Description> </rdf:RDF>
Execute the following steps:
## Graph Cleanup CLEAR GRAPH <urn:owl.test2.tbox> CLEAR GRAPH <http://turnguard.com/virtuoso/test10.rdf> ## Load Instance Data into Quad Store ## PL Procedure ## SQL realm DB.DBA.RDF_LOAD_RDFXML ( http_get('http://www.w3.org/2009/08/skos-reference/skos-owl1-dl.rdf'), 'no', 'urn:owl.test2.tbox' ); DB.DBA.RDF_LOAD_RDFXML ( http_get ('http://www.w3.org/2002/07/owl.rdf'), 'no', 'urn:owl.test2.tbox' ); DB.DBA.RDF_LOAD_RDFXML ( file_to_string ('test10.rdf'), 'no', 'http://turnguard.com/virtuoso/test10.rdf' ); SELECT * FROM <http://www.w3.org/2004/02/skos/core> WHERE { { <http://www.w3.org/2004/02/skos/core#related> ?p ?o } UNION { ?s ?p <http://www.w3.org/2004/02/skos/core#related> } } ## Create Rules ## SQL Realm rdfs_rule_set ('urn:owl.test2.rules', 'urn:owl.test2.tbox'); ## Transitivity Query re. SKOS concept hierarchy DEFINE input:inference "urn:owl.test2.rules" PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT * FROM <http://turnguard.com/virtuoso/test10.rdf> WHERE { <http://www.turnguard.com/ElectroPop> skos:broaderTransitive ?o OPTION (T_DISTINCT). }