%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% The following collection of Xcerpt rules %% %% implements RDFS reasoning in Xcerpt %% %% -------------------------------------------- %% %% For more details see Oliver Bolzer, "Towards %% Data-Integration on the Semantic Web: Querying %% RDF with Xcerpt". Diploma Thesis, 2004 %% Notice that to ensure termination these rules %% must be applied in a specifc order, see the %% thesis for details %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % pass-through all explicit triples CONSTRUCT "subPropertyOf":RDF-TRIPLE[ var S, var P, var O] FROM RDF-TRIPLE[ var S, var P, var O] END % rdfs5, transitive closure of subPropertyOf CONSTRUCT "subPropertyOf":RDF-TRIPLE[ var PROP, "http://www.w3.org/2000/01/rdf-schema#subPropertyOf":uri{}, var SUPERPROP ] FROM and[ RDF-TRIPLE[ var PROP, "http://www.w3.org/2000/01/rdf-schema#subPropertyOf":uri{}, var X ], "subPropertyOf":RDF-TRIPLE[ var X, "http://www.w3.org/2000/01/rdf-schema#subPropertyOf":uri{}, var SUPERPROP ] ] END % rdfs7, subPropertyOf inferencing CONSTRUCT "subPropertyOf":RDF-TRIPLE[ var S, var SUPERPROP, var O ] FROM and[ RDF-TRIPLE[ var S, var PROP, var O ], "subPropertyOf":RDF-TRIPLE[ var PROP, "http://www.w3.org/2000/01/rdf-schema#subPropertyOf":uri{}, var SUPERPROP ] ] END % rdfs6, property is subPropertyOf self CONSTRUCT "subPropertyOf":RDF-TRIPLE[ var PROP, "http://www.w3.org/2000/01/rdf-schema#subPropertyOf":uri{}, var PROP ] FROM RDF-TRIPLE[ var PROP, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property":uri{} ] END % pass-through all explicit and previously inferred triples CONSTRUCT "domainrange":RDF-TRIPLE[ var S, var P, var O] FROM "subPropertyOf":RDF-TRIPLE[ var S, var P, var O] END % rdfs2, rdfs:domain inferencing CONSTRUCT "domainrange":RDF-TRIPLE[ var S, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, var CLASS ] FROM and[ "subPropertyOf":RDF-TRIPLE[ var P, "http://www.w3.org/2000/01/rdf-schema#domain":uri{}, var CLASS ], "subPropertyOf":RDF-TRIPLE[ var S, var P, var O ] ] END % rdfs3, rdfs:range inferencing CONSTRUCT "domainrange":RDF-TRIPLE[ var O, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, var CLASS ] FROM and[ "subPropertyOf":RDF-TRIPLE[ var P, "http://www.w3.org/2000/01/rdf-schema#range":uri{}, var CLASS ], "subPropertyOf":RDF-TRIPLE[ var S, var P, var O ] ] END % pass-through all explicit and previously inferred triples CONSTRUCT "rdfs":RDF-TRIPLE[ var S, var P, var O] FROM "domainrange":RDF-TRIPLE[ var S, var P, var O] END % rdfs9, type inferencing with subClassOf CONSTRUCT "rdfs":RDF-TRIPLE[ var RESOURCE, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, var SUPERCLASS ] FROM and[ "domainrange":RDF-TRIPLE[ var RESOURCE, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, var CLASS ], "rdfs":RDF-TRIPLE[ var CLASS, "http://www.w3.org/2000/01/rdf-schema#subClassOf":uri{}, SUPERCLASS ] ] END % rdfs10, classes are subClassOf self CONSTRUCT "rdfs":RDF-TRIPLE[ var CLASS, "http://www.w3.org/2000/01/rdf-schema#subClassOf":uri{}, var CLASS ] FROM "domainrange":RDF-TRIPLE[ var CLASS, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, "http://www.w3.org/1999/02/22-rdf-syntax-ns#Class":uri{} ] END % rdfs11, transitive closure of subClassOf CONSTRUCT "rdfs":RDF-TRIPLE[ var CLASS, "http://www.w3.org/2000/01/rdf-schema#subClassOf":uri{}, var SUPERCLASS ] FROM and[ "domainrange":RDF-TRIPLE[ var CLASS, "http://www.w3.org/2000/01/rdf-schema#subClassOf":uri{}, var X ], "rdfs":RDF-TRIPLE[ var X, "http://www.w3.org/2000/01/rdf-schema#subClassOf":uri{}, var SUPERCLASS ] ] END CONSTRUCT RDF-TRIPLE[ &join("http://www.w3.org/1999/02/22-rdf-syntax-ns#_", var INT):uri{}, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type":uri{}, "http://www.w3.org/2000/01/rdf-schema#ContainerMembershipProperty":uri{} ] FROM RDF-TRIPLE[ var SUBJECT, /http://www.w3.org/1999/02/22-rdf-syntax-ns#_(var INT as [1-9][0-9]*)/:uri{}, var OBJECT, ] where { var INT > 1 } END CONSTRUCT RDF-TRIPLE[ &join("http://www.w3.org/1999/02/22-rdf-syntax-ns#_", var INT):uri{}, "http://www.w3.org/2000/01/rdf-schema#domain":uri{}, "http://www.w3.org/2000/01/rdf-schema#Resource":uri{} ] FROM RDF-TRIPLE[ var SUBJECT, /http://www.w3.org/1999/02/22-rdf-syntax-ns#_(var INT as [1-9][0-9]*)/:uri{}, var OBJECT, ] where { var INT > 1 } END CONSTRUCT RDF-TRIPLE[ &join("http://www.w3.org/1999/02/22-rdf-syntax-ns#_", var INT):uri{}, "http://www.w3.org/2000/01/rdf-schema#range":uri{}, "http://www.w3.org/2000/01/rdf-schema#Resource":uri{} ] FROM RDF-TRIPLE[ var SUBJECT, /http://www.w3.org/1999/02/22-rdf-syntax-ns#_(var INT as [1-9][0-9]*)/:uri{}, var OBJECT, ] where { var INT > 1 } END