RDFS Entailment Examples#

https://www.w3.org/TR/sparql11-entailment/

Absatz https://www.w3.org/TR/sparql11-entailment/#entEffects:

import rdflib
import pprint
import owlrl
ex_book_prefixes = "@prefix ex: <http://example.org/ns#> . \n\
    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n\
    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . #0"

ex_book_triples = [ ex_book_prefixes,  #0
    "ex:book1 rdf:type ex:Publication . #1",
    "ex:book2 rdf:type ex:Article . #2",  
    "ex:Article rdfs:subClassOf ex:Publication . #3",
    "ex:publishes rdfs:range ex:Publication . #4", 
    "ex:MITPress ex:publishes ex:book3 . #5"          
]
ex_book_triples
['@prefix ex: <http://example.org/ns#> . \n    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . #0',
 'ex:book1 rdf:type ex:Publication . #1',
 'ex:book2 rdf:type ex:Article . #2',
 'ex:Article rdfs:subClassOf ex:Publication . #3',
 'ex:publishes rdfs:range ex:Publication . #4',
 'ex:MITPress ex:publishes ex:book3 . #5']

ttl zusammenbauen, dann parsen

ex_book_items = [0,1,2,3,4,5 ]
ex_book = "\n".join([ex_book_triples[i] for i in range(len(ex_book_triples)) if i in ex_book_items])
print(ex_book)
@prefix ex: <http://example.org/ns#> . 
    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . #0
ex:book1 rdf:type ex:Publication . #1
ex:book2 rdf:type ex:Article . #2
ex:Article rdfs:subClassOf ex:Publication . #3
ex:publishes rdfs:range ex:Publication . #4
ex:MITPress ex:publishes ex:book3 . #5
g1 = rdflib.Graph().parse(data= ex_book)
for row in g1: print(row)
(rdflib.term.URIRef('http://example.org/ns#publishes'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#range'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#book1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#MITPress'), rdflib.term.URIRef('http://example.org/ns#publishes'), rdflib.term.URIRef('http://example.org/ns#book3'))
(rdflib.term.URIRef('http://example.org/ns#book2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://example.org/ns#Article'))
(rdflib.term.URIRef('http://example.org/ns#Article'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://example.org/ns#Publication'))
print(g1.serialize(format="ttl"))
@prefix ex: <http://example.org/ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

ex:MITPress ex:publishes ex:book3 .

ex:book1 a ex:Publication .

ex:book2 a ex:Article .

ex:publishes rdfs:range ex:Publication .

ex:Article rdfs:subClassOf ex:Publication .
q = """
SELECT ?pub ?class
WHERE { ?pub rdf:type ?class }
LIMIT 7
"""
q1_result = g1.query(q)
for row in q1_result: 
    print(row)
(rdflib.term.URIRef('http://example.org/ns#book1'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#book2'), rdflib.term.URIRef('http://example.org/ns#Article'))
g2 = rdflib.Graph().parse(data= ex_book)
owlrl.DeductiveClosure(owlrl.OWLRL_Semantics,
    axiomatic_triples = False).expand(g2)
for row in g2.query(q): print(row)
(rdflib.term.URIRef('http://example.org/ns#book1'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#book2'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#book3'), rdflib.term.URIRef('http://example.org/ns#Publication'))
(rdflib.term.URIRef('http://example.org/ns#book2'), rdflib.term.URIRef('http://example.org/ns#Article'))
(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'))
(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'))
(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'))
g2_ttl = g2.serialize(format="ttl")
print(g2_ttl)
@prefix ex: <http://example.org/ns#> .
@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#> .

ex:MITPress ex:publishes ex:book3 ;
    owl:sameAs ex:MITPress .

ex:book1 a ex:Publication ;
    owl:sameAs ex:book1 .

ex:book2 a ex:Article,
        ex:Publication ;
    owl:sameAs ex:book2 .

ex:publishes rdfs:range ex:Publication ;
    owl:sameAs ex:publishes .

rdf:HTML a rdfs:Datatype ;
    owl:sameAs rdf:HTML .

rdf:PlainLiteral a rdfs:Datatype ;
    owl:sameAs rdf:PlainLiteral .

rdf:XMLLiteral a rdfs:Datatype ;
    owl:sameAs rdf:XMLLiteral .

rdf:langString a rdfs:Datatype ;
    owl:sameAs rdf:langString .

rdf:type owl:sameAs rdf:type .

rdfs:Literal a rdfs:Datatype ;
    owl:sameAs rdfs:Literal .

rdfs:comment a owl:AnnotationProperty ;
    owl:sameAs rdfs:comment .

rdfs:isDefinedBy a owl:AnnotationProperty ;
    owl:sameAs rdfs:isDefinedBy .

rdfs:label a owl:AnnotationProperty ;
    owl:sameAs rdfs:label .

rdfs:range owl:sameAs rdfs:range .

rdfs:seeAlso a owl:AnnotationProperty ;
    owl:sameAs rdfs:seeAlso .

rdfs:subClassOf owl:sameAs rdfs:subClassOf .

xsd:NCName a rdfs:Datatype ;
    owl:sameAs xsd:NCName .

xsd:NMTOKEN a rdfs:Datatype ;
    owl:sameAs xsd:NMTOKEN .

xsd:Name a rdfs:Datatype ;
    owl:sameAs xsd:Name .

xsd:anyURI a rdfs:Datatype ;
    owl:sameAs xsd:anyURI .

xsd:base64Binary a rdfs:Datatype ;
    owl:sameAs xsd:base64Binary .

xsd:boolean a rdfs:Datatype ;
    owl:sameAs xsd:boolean .

xsd:byte a rdfs:Datatype ;
    owl:sameAs xsd:byte .

xsd:date a rdfs:Datatype ;
    owl:sameAs xsd:date .

xsd:dateTime a rdfs:Datatype ;
    owl:sameAs xsd:dateTime .

xsd:dateTimeStamp a rdfs:Datatype ;
    owl:sameAs xsd:dateTimeStamp .

xsd:decimal a rdfs:Datatype ;
    owl:sameAs xsd:decimal .

xsd:double a rdfs:Datatype ;
    owl:sameAs xsd:double .

xsd:float a rdfs:Datatype ;
    owl:sameAs xsd:float .

xsd:hexBinary a rdfs:Datatype ;
    owl:sameAs xsd:hexBinary .

xsd:int a rdfs:Datatype ;
    owl:sameAs xsd:int .

xsd:integer a rdfs:Datatype ;
    owl:sameAs xsd:integer .

xsd:language a rdfs:Datatype ;
    owl:sameAs xsd:language .

xsd:long a rdfs:Datatype ;
    owl:sameAs xsd:long .

xsd:negativeInteger a rdfs:Datatype ;
    owl:sameAs xsd:negativeInteger .

xsd:nonNegativeInteger a rdfs:Datatype ;
    owl:sameAs xsd:nonNegativeInteger .

xsd:nonPositiveInteger a rdfs:Datatype ;
    owl:sameAs xsd:nonPositiveInteger .

xsd:normalizedString a rdfs:Datatype ;
    owl:sameAs xsd:normalizedString .

xsd:positiveInteger a rdfs:Datatype ;
    owl:sameAs xsd:positiveInteger .

xsd:short a rdfs:Datatype ;
    owl:sameAs xsd:short .

xsd:string a rdfs:Datatype ;
    owl:sameAs xsd:string .

xsd:time a rdfs:Datatype ;
    owl:sameAs xsd:time .

xsd:token a rdfs:Datatype ;
    owl:sameAs xsd:token .

xsd:unsignedByte a rdfs:Datatype ;
    owl:sameAs xsd:unsignedByte .

xsd:unsignedInt a rdfs:Datatype ;
    owl:sameAs xsd:unsignedInt .

xsd:unsignedLong a rdfs:Datatype ;
    owl:sameAs xsd:unsignedLong .

xsd:unsignedShort a rdfs:Datatype ;
    owl:sameAs xsd:unsignedShort .

owl:backwardCompatibleWith a owl:AnnotationProperty ;
    owl:sameAs owl:backwardCompatibleWith .

owl:deprecated a owl:AnnotationProperty ;
    owl:sameAs owl:deprecated .

owl:equivalentClass owl:sameAs owl:equivalentClass .

owl:incompatibleWith a owl:AnnotationProperty ;
    owl:sameAs owl:incompatibleWith .

owl:priorVersion a owl:AnnotationProperty ;
    owl:sameAs owl:priorVersion .

owl:sameAs owl:sameAs owl:sameAs .

owl:versionInfo a owl:AnnotationProperty ;
    owl:sameAs owl:versionInfo .

ex:Article rdfs:subClassOf ex:Publication ;
    owl:sameAs ex:Article .

ex:book3 a ex:Publication ;
    owl:sameAs ex:book3 .

owl:Class owl:sameAs owl:Class .

owl:Nothing a owl:Class ;
    rdfs:subClassOf owl:Nothing,
        owl:Thing ;
    owl:equivalentClass owl:Nothing ;
    owl:sameAs owl:Nothing .

owl:Thing a owl:Class ;
    rdfs:subClassOf owl:Thing ;
    owl:equivalentClass owl:Thing ;
    owl:sameAs owl:Thing .

ex:Publication owl:sameAs ex:Publication .

owl:AnnotationProperty owl:sameAs owl:AnnotationProperty .

rdfs:Datatype owl:sameAs rdfs:Datatype .