<> <#rcsid> "$Id: rdfs-rules.n3,v 1.11 2002/08/13 15:51:57 jderoo Exp $" .

### rules for RDFS entailment

@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <rdfs-rules#> .

rdfs:Class a rdfs:Class .
rdf:List a rdfs:Class .
rdfs:Literal a rdfs:Class .
rdf:Property a rdfs:Class .
rdfs:Resource a rdfs:Class .

rdfs:domain a rdf:Property; rdfs:domain rdf:Property; rdfs:range rdfs:Class .
rdf:first a rdf:Property; rdfs:domain rdf:List .
rdf:nil a rdf:List .
rdfs:range a rdf:Property; rdfs:domain rdf:Property; rdfs:range rdfs:Class .
rdf:rest a rdf:Property; rdfs:domain rdf:List; rdfs:range rdf:List .
rdfs:subClassOf a rdf:Property; rdfs:domain rdfs:Class; rdfs:range rdfs:Class .
rdfs:subPropertyOf a rdf:Property; rdfs:domain rdf:Property; rdfs:range rdf:Property .
rdf:type a rdf:Property; rdfs:domain rdfs:Resource; rdfs:range rdfs:Class .

this log:forAll :s, :o, :x, :p, :q, :r, :A, :B, :C .

{ :rule1 . :s :p :o } log:implies { :p a rdf:Property } .

{ :rule2 . :p rdfs:domain :C . :s :p :o } log:implies { :s a :C } .

{ :rule3 . :p rdfs:range :C . :s :p :o } log:implies { :o a :C } .

{ :rule4a . :s :p :o } log:implies { :s a rdfs:Resource } .
{ :rule4b . :s :p :o } log:implies { :o a rdfs:Resource } .

{ :rule5 . :q rdfs:subPropertyOf :r . :p rdfs:subPropertyOf :q } log:implies { :p rdfs:subPropertyOf :r } .

{ :rule6a . :p rdfs:subPropertyOf :r . :s :p :o } log:implies { :s :r :o } .
{ :rule6b . ( :p :q ) rdfs:subPropertyOf :r . :x :q :o . :s :p :x } log:implies { :s :r :o } .

{ :rule7 . :C a rdfs:Class } log:implies { :C rdfs:subClassOf rdfs:Resource } .

{ :rule8 . :B rdfs:subClassOf :C . :A rdfs:subClassOf :B } log:implies { :A rdfs:subClassOf :C } .

{ :rule9 . :A rdfs:subClassOf :B . :s a :A } log:implies { :s a :B } .
