SQuARE: the SPARQL Query Agent-based Reasoning Engine*
*This work is partially supported by IBM Research through the AI Horizons Network.
Abstract
In order to support potential applications involving hybrid, distributed, or custom reasoning, as well as explainability in reasoning, we introduce SQuARE, the SPARQL Query Agent-based Reasoning Engine. SQuARE is a deductive inference engine implemented by encoding each OWL Description Logic (DL) axiom as a SPARQL CONSTRUCT query. We describe our approach for formulating the queries and implementing SQuARE within an existing knowledge management framework. While earlier work has proposed SPARQL extensions for various purposes, we find that the complete set of queries used in SPARQL-based reasoning methods are not publicly available. Our complete set of DL queries are made open-source along with our extensible test set, enabling reuse for novel applications in which similar approaches may be employed. SETS, the SQuARE Evaluation Test Set, includes example RDF representations for each DL axiom, enabling the testing of reasoning engines at a per axiom basis. Using SETS, we evaluate the DL complexity of existing reasoning engines. The approach described in this paper has benefits related to inference engine customization capabilities and of being able to reason over inconsistent knowledge.
Table of Contents
- SQuARE: the SPARQL Query Agent-based Reasoning Engine*
- Abstract
- Resources
- Square Evaulation Test Set
- SPARQL CONSTRUCT Axioms
- Inclusion
- Equivalence
- Disjointness
- Transitivity
- Reflexivity
- Symmetry
- Functionality
- Inversion
- Domain & Range Restrictions
- Datatype
- Assertions
- Keys
- Existential Quantification
- Universal Quantification
- Self Restriction
- Individual Enumeration
- Cardinality
- Disjunction
- Intersection
- Negation
- Code
- Support or Contact
- Evaluation
Resources
Square Evaluation Test Set
The documentation for the test set is available here.
The consistent version of the test set is available here.
The inconsistent version of the test set is available here.
SPARQL CONSTRUCT Axioms
Inclusion
Class Inclusion
Axiom
Query
CONSTRUCT {
?resource rdfs:subClassOf ?superClass .
}
WHERE {
?resource rdfs:subClassOf ?class .
?class rdfs:subClassOf+ ?superClass .
}
Explanation
Since class is a subclass of superClass, any class that is a subclass of class is also a subclass of superClass. Therefore, resource is a subclass of superClass.
Example
sio:Entity rdf:type owl:Class ;
rdfs:label "entity" ;
dct:description "Every thing is an entity." .
sio:Object rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "object" ;
dct:description "An object is an entity that is wholly identifiable at any instant of time during which it exists." .
sio:MaterialEntity rdf:type owl:Class ;
rdfs:label "material entity" ;
rdfs:subClassOf sio:Object ;
dct:description "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." .
A reasoner should infer sio:MaterialEntity rdfs:subClassOf sio:Entity .
Individual Inclusion
Axiom
Query
CONSTRUCT {
?resource rdf:type ?superClass .
}
WHERE {
?resource rdf:type ?class .
?class rdfs:subClassOf+ ?superClass .
}
Explanation
Any instance of class is also an instance of superClass. Therefore, since resource is a class, it also is a superClass.
Example
sio:Role rdf:type owl:Class ;
rdfs:label "role" ;
rdfs:subClassOf sio:RealizableEntity ;
dct:description "A role is a realizable entity that describes behaviours, rights and obligations of an entity in some particular circumstance." .
sets-kb:Farmer rdf:type sio:Role ;
rdfs:label "farmer" .
A reasoner should infer sets-kb:Farmer rdf:type sio:RealizableEntity .
Property Inclusion
Axiom
Query
CONSTRUCT {
?resource ?superProperty ?o .
}
WHERE {
?resource ?p ?o .
?p rdf:type owl:Property ;
rdfs:subPropertyOf+ ?superProperty .
}
Explanation
Any subject and object related by the property p is also related by superProperty. Therefore, since resource p o, it is implied that resource superProperty o.
Object Property Inclusion
Query
CONSTRUCT {
?resource ?superProperty ?o .
}
WHERE {
?resource ?p ?o .
?p rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf+ ?superProperty .
}
Explanation
Any subject and object related by the property p is also related by superProperty. Therefore, since resource p o, it is implied that resource superProperty o.
Example
sio:Age rdf:type owl:Class ;
rdfs:label "age" ;
rdfs:subClassOf sio:DimensionalQuantity ;
dct:description "Age is the length of time that a person has lived or a thing has existed." .
sio:DimensionlessQuantity rdf:type owl:Class ;
rdfs:label "dimensionless quantity" ;
rdfs:subClassOf sio:Quantity ,
[ rdf:type owl:Class ;
owl:complementOf [ rdf:type owl:Restriction ;
owl:onProperty sio:hasUnit ;
owl:someValuesFrom sio:UnitOfMeasurement ] ];
owl:disjointWith sio:DimensionalQuantity ;
dct:description "A dimensionless quantity is a quantity that has no associated unit." .
sio:Quantity rdf:type owl:Class ;
rdfs:label "quantity" ;
owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf (sio:DimensionlessQuantity sio:DimensionalQuantity) ] ;
rdfs:subClassOf sio:MeasurementValue ;
dct:description "A quantity is an informational entity that gives the magnitude of a property." .
sio:MeasurementValue rdf:type owl:Class ;
rdfs:label "measurement value" ;
rdfs:subClassOf sio:Number ;
dct:description "A measurement value is a quantitative description that reflects the magnitude of some attribute." .
sio:Number rdf:type owl:Class ;
rdfs:label "number" ;
rdfs:subClassOf sio:MathematicalEntity ;
dct:description "A number is a mathematical object used to count, label, and measure." .
sets-kb:Samantha sio:hasProperty sets-kb:AgeOfSamantha .
sets-kb:AgeOfSamantha rdf:type sio:Age ;
rdfs:label "Samantha's age" .
A reasoner should infer sets-kb:Samantha sio:hasAttribute sets-kb:AgeOfSamantha .
Data Property Inclusion
Query
CONSTRUCT {
?resource ?superProperty ?o .
}
WHERE {
?resource ?p ?o .
?p rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf+ ?superProperty .
}
Explanation
Any subject and object related by the property p is also related by superProperty. Therefore, since resource p o, it is implied that resource superProperty o.
Example
sets:hasExactValue rdf:type owl:DatatypeProperty ;
rdfs:label "has exact value" ;
rdfs:subPropertyOf sio:hasValue .
sets-kb:AgeOfSamantha sets:hasExactValue "25.82"^^xsd:decimal .
A reasoner should infer sets-kb:AgeOfSamantha sio:hasValue 25.82 .
Object Property Chain Inclusion
Query
CONSTRUCT {
?resource ?objectProperty ?o .
}
WHERE {
?objectProperty rdf:type owl:ObjectProperty ;
owl:propertyChainAxiom ?list .
?list rdf:first ?prop1 .
?list rdf:rest/rdf:first ?prop2 .
?resource ?prop1 [ ?prop2 ?o ] .
}
Explanation
Example
sio:isLocatedIn rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ;
rdfs:subPropertyOf sio:isSpatiotemporallyRelatedTo ;
rdfs:label "is located in" ;
dct:description "A is located in B iff the spatial region occupied by A is part of the spatial region occupied by B." .
sio:isPartOf rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ,
owl:ReflexiveProperty ;
rdfs:subPropertyOf sio:isLocatedIn ;
rdfs:label "is part of" ;
dct:description "is part of is a transitive, reflexive and anti-symmetric mereological relation between a whole and itself or a part and its whole." .
sio:isRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:label "is related to" ;
dct:description "A is related to B iff there is some relation between A and B." .
sio:isSpatiotemporallyRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:subPropertyOf sio:isRelatedTo ;
rdfs:label "is spatiotemporally related to" ;
dct:description "A is spatiotemporally related to B iff A is in the spatial or temporal vicinity of B" .
sio:overlapsWith rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ,
owl:ReflexiveProperty ;
rdfs:subPropertyOf sio:isSpatiotemporallyRelatedTo ;
owl:propertyChainAxiom ( sio:overlapsWith sio:isPartOf ) ;
dct:description "A overlaps with B iff there is some C that is part of both A and B." ;
rdfs:label "overlaps with" .
sets-kb:Rug rdf:type sio:Object ;
rdfs:label "rug" ;
sio:overlapsWith sets-kb:FloorPanel .
sets-kb:FloorPanel rdf:type sio:Object ;
rdfs:label "floor panel" ;
sio:isPartOf sets-kb:Floor .
sets-kb:Floor rdf:type sio:Object ;
rdfs:label "floor" .
A reasoner should infer sets-kb:Rug sio:overlapsWith sets-kb:Floor .
Equivalence
Class Equivalence
Axiom
Query
CONSTRUCT {
?resource rdf:type ?equivClass .
}
WHERE {
?resource rdf:type ?superClass.
{?superClass owl:equivalentClass ?equivClass .}
UNION
{?equivClass owl:equivalentClass ?superClass .}
}
Explanation
superClass is equivalent to equivClass, so since resource is a superClass, it is also a equivClass.
Example
sets:Fake rdf:type owl:Class ;
owl:equivalentClass sio:Fictional ;
rdfs:label "fake" .
sets-kb:Hubert rdf:type sets:Fake ;
rdfs:label "Hubert" .
A reasoner should infer sets-kb:Hubert rdf:type sio:Fictional .
Property Equivalence
Axiom
Query
CONSTRUCT {
?resource ?equivProperty ?o .
}
WHERE {
?resource ?p ?o .
{?p owl:equivalentProperty ?equivProperty .}
UNION
{?equivProperty owl:equivalentProperty ?p . }
}
Explanation
The properties p and equivProperty are equivalent. Therefore, since resource p o, it is implied that resource equivProperty o.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sets-kb:AgeOfSamantha rdf:type sio:Age ;
rdfs:label "Samantha's age" ;
sio:hasValue "25.82"^^xsd:decimal .
sets:hasValue rdf:type owl:DatatypeProperty ;
rdfs:label "has value" ;
owl:equivalentProperty sio:hasValue .
A reasoner should infer sets-kb:AgeOfSamantha sets:hasValue 25.82 .
Disjointness
Class Disjointness
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class .
?resource rdf:type ?disjointClass .
{ ?class owl:disjointWith ?disjointClass . }
UNION
{ ?disjointClass owl:disjointWith ?class . }
}
Explanation
Since class is a disjoint with disjointClass, any resource that is an instance of class is not an instance of disjointClass. Therefore, since resource is an instance of class, it can not be an instance of disjointClass.
Example
sio:Entity rdf:type owl:Class ;
rdfs:label "entity" ;
dct:description "Every thing is an entity." .
sio:Attribute rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "attribute" ;
dct:description "An attribute is a characteristic of some entity." .
sio:RealizableEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Attribute ;
dct:description "A realizable entity is an attribute that is exhibited under some condition and is realized in some process." ;
rdfs:label "realizable entity" .
sio:Quality rdf:type owl:Class ;
rdfs:subClassOf sio:Attribute ;
owl:disjointWith sio:RealizableEntity ;
dct:description "A quality is an attribute that is intrinsically associated with its bearer (or its parts), but whose presence/absence and observed/measured value may vary." ;
rdfs:label "quality" .
sio:ExistenceQuality rdf:type owl:Class ;
rdfs:subClassOf sio:Quality ;
dct:description "existence quality is the quality of an entity that describe in what environment it is known to exist." ;
rdfs:label "existence quality" .
sio:Virtual rdf:type owl:Class ;
rdfs:subClassOf sio:ExistenceQuality ;
dct:description "virtual is the quality of an entity that exists only in a virtual setting such as a simulation or game environment." ;
rdfs:label "virtual" .
sio:Real rdf:type owl:Class ;
rdfs:subClassOf sio:ExistenceQuality ;
owl:disjointWith sio:Fictional ;
owl:disjointWith sio:Virtual ;
dct:description "real is the quality of an entity that exists in real space and time." ;
rdfs:label "real" .
sio:Hypothetical rdf:type owl:Class ;
rdfs:subClassOf sio:ExistenceQuality ;
dct:description "hypothetical is the quality of an entity that is conjectured to exist." ;
rdfs:label "hypothetical" .
sio:Fictional rdf:type owl:Class ;
rdfs:subClassOf sio:Hypothetical ;
dct:description "fictional is the quality of an entity that exists only in a creative work of fiction." ;
rdfs:label "fictional" .
sets-kb:ImaginaryFriend
rdfs:label "my imaginary friend" ;
rdf:type sio:Real ;
rdf:type sio:Fictional .
A reasoner should infer sets-kb:ImaginaryFriend rdf:type owl:Nothing .
or that an inconsistency occurs.
Property Disjointness
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?p1 ?o1 ,
?o2 .
?resource ?p2 ?o2.
{?p1 owl:propertyDisjointWith ?p2 .}
UNION
{?p2 owl:propertyDisjointWith ?p1 .}
}
Explanation
Since properties p1 and p2 are disjoint, resource having both p2 o2 as well as p1 o2 leads to an inconsistency.
Example
sets:hasMother rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf sio:hasAttribute ;
rdfs:label "has mother" ;
owl:propertyDisjointWith sets:hasFather .
sets:hasFather rdf:type owl:ObjectProperty ;
rdfs:label "has father" .
sets-kb:Jordan rdf:type sio:Human ;
rdfs:label "Jordan" .
sets-kb:Susan rdf:type sio:Human ;
rdfs:label "Susan" ;
sets:hasFather sets-kb:Jordan ;
sets:hasMother sets-kb:Jordan .
A reasoner should infer sets-kb:Susan rdf:type owl:Nothing .
or that an inconsistency occurs.
All Disjoint Classes
Axiom
Query
CONSTRUCT {
?member owl:disjointWith ?item .
}
WHERE {
?restriction rdf:type owl:AllDisjointClasses ;
owl:members ?list .
?list rdf:rest*/rdf:first ?member .
{
SELECT DISTINCT ?item ?restrict WHERE
{
?restrict rdf:type owl:AllDisjointClasses ;
owl:members ?list .
?list rdf:rest*/rdf:first ?item .
}
}
BIND(?restriction AS ?restrict)
FILTER(?member != ?item)
}
Explanation
Since restriction is an all disjoint classes restriction with classes listed in list, each member in list is disjoint with each other member in the list.
Example
sio:Entity rdf:type owl:Class ;
rdfs:label "entity" ;
dct:description "Every thing is an entity." .
sio:Process rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
dct:description "A process is an entity that is identifiable only through the unfolding of time, has temporal parts, and unless otherwise specified/predicted, cannot be identified from any instant of time in which it exists." ;
rdfs:label "process" .
sio:Attribute rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "attribute" ;
dct:description "An attribute is a characteristic of some entity." .
sio:Object rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "object" ;
dct:description "An object is an entity that is wholly identifiable at any instant of time during which it exists." .
[ rdf:type owl:AllDisjointClasses ;
owl:members ( sio:Process sio:Attribute sio:Object ) ] .
A reasoner should infer sio:Process owl:disjointWith sio:Object , sio:Attribute . sio:Attribute owl:disjointWith sio:Object , sio:Process . sio:Object owl:disjointWith sio:Attribute, sio:Process .
All Disjoint Properties
Axiom
Query
CONSTRUCT {
?member owl:propertyDisjointWith ?item .
}
WHERE {
?restriction rdf:type owl:AllDisjointProperties ;
owl:members ?list .
?list rdf:rest*/rdf:first ?member .
{
SELECT DISTINCT ?item ?restrict WHERE
{
?restrict rdf:type owl:AllDisjointProperties ;
owl:members ?list .
?list rdf:rest*/rdf:first ?item .
}
}
BIND(?restriction AS ?restrict)
FILTER(?member != ?item)
}
Explanation
Since restriction is an all disjoint properties restriction with properties listed in list, each member in list is disjoint with each other property in the list.
Example
sets-kb:DisjointPropertiesRestriction rdf:type owl:AllDisjointProperties ;
owl:members ( sets:hasMother sets:hasFather sets:hasSibling ) .
sets:hasMother rdf:type owl:ObjectProperty ;
rdfs:label "has mother" .
sets:hasFather rdf:type owl:ObjectProperty ;
rdfs:label "has father" .
sets:hasSibling rdf:type owl:ObjectProperty ;
rdfs:label "has sibling" .
A reasoner should infer sets:hasMother owl:propertyDisjointWith sets:hasFather , sets:hasSibling . sets:hasFather owl:propertyDisjointWith sets:hasMother , sets:hasSibling . sets:hasSibling owl:propertyDisjointWith sets:hasMother , sets:hasFather .
Transitivity
Object Property Transitivity
Axiom
Query
CONSTRUCT {
?resource ?transitiveProperty ?o2 .
}
WHERE {
?resource ?transitiveProperty ?o1 .
?o1 ?transitiveProperty ?o2 .
?transitiveProperty rdf:type owl:TransitiveProperty .
}
Explanation
Since transitiveProperty is a transitive object property, and the relationships resource transitiveProperty o1 and o1 transitiveProperty o2 exist, then we can infer that resource transitiveProperty o2.
Example
sio:isRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:label "is related to" ;
dct:description "A is related to B iff there is some relation between A and B." .
sio:isSpatiotemporallyRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:subPropertyOf sio:isRelatedTo ;
rdfs:label "is spatiotemporally related to" ;
dct:description "A is spatiotemporally related to B iff A is in the spatial or temporal vicinity of B" .
sio:isLocationOf rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ;
rdfs:subPropertyOf sio:isSpatiotemporallyRelatedTo ;
rdfs:label "is location of" ;
dct:description "A is location of B iff the spatial region occupied by A has the spatial region occupied by B as a part." .
sio:hasPart rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ,
owl:ReflexiveProperty ;
rdfs:subPropertyOf sio:isLocationOf ;
owl:inverseOf sio:isPartOf ;
rdfs:label "has part" ;
dct:description "has part is a transitive, reflexive and antisymmetric relation between a whole and itself or a whole and its part" .
sio:isLocatedIn rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ;
rdfs:subPropertyOf sio:isSpatiotemporallyRelatedTo ;
rdfs:label "is located in" ;
dct:description "A is located in B iff the spatial region occupied by A is part of the spatial region occupied by B." .
sio:isPartOf rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ,
owl:ReflexiveProperty ;
rdfs:subPropertyOf sio:isLocatedIn ;
rdfs:label "is part of" ;
dct:description "is part of is a transitive, reflexive and anti-symmetric mereological relation between a whole and itself or a part and its whole." .
sets-kb:Fingernail rdf:type owl:Individual ;
rdfs:label "finger nail" ;
sio:isPartOf sets-kb:Finger .
sets-kb:Finger rdf:type owl:Individual ;
rdfs:label "finger" ;
sio:isPartOf sets-kb:Hand .
sets-kb:Hand rdf:type owl:Individual ;
rdfs:label "hand" .
A reasoner should infer sets-kb:Fingernail sio:isPartOf sets-kb:Hand .
Reflexivity
Object Property Reflexivity
Axiom
Query
CONSTRUCT {
?resource ?reflexiveProperty ?resource .
}
WHERE {
?resource rdf:type ?type ;
?reflexiveProperty ?o .
?o rdf:type ?type.
?reflexiveProperty rdf:type owl:ReflexiveProperty .
}
Explanation
Since resource has a reflexiveProperty assertion to o, resource and o are both of type type, and reflexiveProperty is a reflexive property, we can infer that resource reflexiveProperty resource.
Example
sio:Process rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
dct:description "A process is an entity that is identifiable only through the unfolding of time, has temporal parts, and unless otherwise specified/predicted, cannot be identified from any instant of time in which it exists." ;
rdfs:label "process" .
sets-kb:Workflow rdf:type sio:Process ;
rdfs:label "workflow" ;
sio:hasPart sets-kb:Step .
sets-kb:Step rdf:type sio:Process ;
rdfs:label "step" .
A reasoner should infer sets-kb:Workflow sio:hasPart sets-kb:Workflow .
Object Property Irreflexivity
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?irreflexiveProperty rdf:type owl:IrreflexiveProperty .
?resource ?irreflexiveProperty ?resource .
}
Explanation
Since resource has an irreflexiveProperty assertion pointing to itself, and irreflexiveProperty is a irreflexive property, we can infer that there is an inconsistency associated with resource.
Example
sio:hasMember rdf:type owl:ObjectProperty ,
owl:IrreflexiveProperty ;
rdfs:subPropertyOf sio:hasAttribute ;
owl:inverseOf sio:isMemberOf ;
rdfs:label "has member" ;
dct:description "has member is a mereological relation between a collection and an item." .
sio:isMemberOf rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf sio:isAttributeOf ;
rdfs:label "is member of" ;
dct:description "is member of is a mereological relation between a item and a collection." .
sio:Collection rdf:type owl:Class ;
rdfs:subClassOf sio:Set ;
rdfs:label "collection" ;
dct:description "A collection is a set for which there exists at least one member, although any member need not to exist at any point in the collection's existence." .
sio:Set rdf:type owl:Class ;
rdfs:subClassOf sio:MathematicalEntity ;
rdfs:label "set" ;
dct:description "A set is a collection of entities, for which there may be zero members." .
sio:MathematicalEntity rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
rdfs:label "mathematical entity" ;
dct:description "A mathematical entity is an information content entity that are components of a mathematical system or can be defined in mathematical terms." .
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sets-kb:Group rdf:type sio:Collection ;
rdfs:label "group" ;
sio:hasMember sets-kb:Group .
A reasoner should infer sets-kb:Group rdf:type owl:Nothing .
or that an inconsistency occurs.
Symmetry
Object Property Symmetry
Axiom
Query
CONSTRUCT {
?o ?symmetricProperty ?resource .
}
WHERE {
?resource ?symmetricProperty ?o .
?symmetricProperty rdf:type owl:SymmetricProperty .
}
Explanation
Since symmetricProperty is a symmetric property, and resource symmetricProperty o, we can infer that o symmetricProperty resource.
Example
sio:isRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:label "is related to" ;
dct:description "A is related to B iff there is some relation between A and B." .
sets-kb:Peter rdf:type sio:Human ;
rdfs:label "Peter" ;
sio:isRelatedTo sets-kb:Samantha .
sets-kb:Samantha rdf:type sio:Human ;
rdfs:label "Samantha" .
A reasoner should infer sets-kb:Samantha sio:isRelatedTo sets-kb:Peter .
Object Property Asymmetry
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?asymmetricProperty ?o .
?asymmetricProperty rdf:type owl:AsymmetricProperty .
?o ?asymmetricProperty ?resource .
}
Explanation
Since asymmetricProperty is an asymmetric property, and resource asymmetricProperty o, then the assertion o asymmetricProperty resource results in an inconsistency.
Example
sio:isProperPartOf rdf:type owl:ObjectProperty ,
owl:AsymmetricProperty ,
owl:IrreflexiveProperty ;
rdfs:label "is proper part of" ;
rdfs:subPropertyOf sio:isPartOf ;
dct:description "is proper part of is an asymmetric, irreflexive (normally transitive) relation between a part and its distinct whole." .
sets-kb:Nose rdf:type owl:Individual ;
rdfs:label "nose" ;
sio:isProperPartOf sets-kb:Face .
sets-kb:Face rdf:type owl:Individual ;
sio:isProperPartOf sets-kb:Nose ;
rdfs:label "face" .
A reasoner should infer sets-kb:Face rdf:type owl:Nothing .
, sets-kb:Nose rdf:type owl:Nothing .
, and/or that an inconsistency occurs.
Functionality
Axiom
Functional Object Property
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?functionalProperty ?o1 ,
?o2 .
?functionalProperty rdf:type owl:ObjectProperty ,
owl:FunctionalProperty .
FILTER (str(?o1) != str(?o2))
}
Explanation
Since functionalProperty is a functional object property, resource can only have one value for functionalProperty. Since resource functionalProperty both o1 and o2, we can infer that o1 and o2 must be the same individual.
Example
sio:Role rdf:type owl:Class ;
rdfs:label "role" ;
rdfs:subClassOf sio:RealizableEntity ;
dct:description "A role is a realizable entity that describes behaviours, rights and obligations of an entity in some particular circumstance." .
sio:isAttributeOf rdf:type owl:ObjectProperty ;
rdfs:label "is attribute of" ;
dct:description "is attribute of is a relation that associates an attribute with an entity where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:hasAttribute rdf:type owl:ObjectProperty ;
rdfs:label "has attribute" ;
dct:description "has attribute is a relation that associates a entity with an attribute where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:isPropertyOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is property of" ;
dct:description "is property of is a relation betweena quality, capability or role and the entity that it and it alone bears." ;
rdfs:subPropertyOf sio:isAttributeOf .
sio:hasProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has property" ;
owl:inverseOf sio:isPropertyOf ;
dct:description "has property is a relation between an entity and the quality, capability or role that it and it alone bears." ;
rdfs:subPropertyOf sio:hasAttribute .
sio:hasRealizableProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has realizable property" ;
rdfs:subPropertyOf sio:hasProperty .
sio:isRealizablePropertyOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is realizable property of" ;
rdfs:subPropertyOf sio:isPropertyOf ;
owl:inverseOf sio:hasRealizableProperty .
sio:isRoleOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is role of" ;
rdfs:domain sio:Role ;
rdfs:subPropertyOf sio:isRealizablePropertyOf ;
dct:description "is role of is a relation between a role and the entity that it is a property of." ;
owl:inverseOf sio:hasRole .
sets-kb:Tutor rdf:type sio:Human ;
rdfs:label "tutor" .
sets-kb:TeachingRole rdf:type sio:Role ;
rdfs:label "teaching role" ;
sio:isRoleOf sets-kb:Tutor .
sets-kb:TutoringRole rdf:type sio:Role ;
rdfs:label "tutoring role" ;
sio:isRoleOf sets-kb:Tutor .
A reasoner should infer sets-kb:TeachingRole owl:sameAs sets-kb:TutoringRole .
Functional Data Property
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?functionalProperty ?o1 ,
?o2 .
?functionalProperty rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty .
FILTER (str(?o1) != str(?o2))
}
Explanation
Since functionalProperty is a functional data property, resource can only have one value for functionalProperty. Since resource functionalProperty both o1 and o2, and o1 is different from o2, an inconsistency occurs.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sets-kb:HeightOfTom sio:hasValue "5"^^xsd:integer .
sets-kb:HeightOfTom sio:hasValue "6"^^xsd:integer .
A reasoner should infer sets-kb:HeightOfTom rdf:type owl:Nothing .
or that an inconsistency occurs.
Inversion
Object Property Inversion
Axiom
Query
CONSTRUCT {
?o ?inverseProperty ?resource .
}
WHERE {
?resource ?p ?o .
?p rdf:type owl:ObjectProperty .
{?p owl:inverseOf ?inverseProperty .}
UNION
{?inverseProperty owl:inverseOf ?p . }
}
Explanation
The object properties p and inverseProperty are inversely related to eachother. Therefore, since resource p o, it is implied that o inverseProperty resource.
Example
sio:hasAttribute rdf:type owl:ObjectProperty ;
rdfs:label "has attribute" ;
dct:description "has attribute is a relation that associates a entity with an attribute where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
owl:inverseOf sio:isAttributeOf ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:hasProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has property" ;
owl:inverseOf sio:isPropertyOf ;
dct:description "has property is a relation between an entity and the quality, capability or role that it and it alone bears." ;
rdfs:subPropertyOf sio:hasAttribute .
sio:Symbol rdf:type owl:Class ;
rdfs:subClassOf sio:Representation ;
dct:description "A symbol is a proposition about what an entity represents." ;
rdfs:label "symbol" .
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sio:Representation rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
dct:description "A representation is a entity that in some way represents another entity (or attribute thereof)." ;
rdfs:label "representation" .
sets:MolecularFormula rdfs:subClassOf sio:Symbol ;
rdfs:label "molecular formula" .
sets-kb:Water sio:hasAttribute sets-kb:H2O ;
rdfs:label "water" .
sets-kb:HyrdogenDioxide sio:hasAttribute sets-kb:H2O ;
rdfs:label "hydrogen dioxide" .
sets-kb:H2O rdf:type sets:MolecularFormula ;
rdfs:label "H2O" .
A reasoner should infer sets-kb:H2O sio:isAttributeOf sets-kb:Water .
Inverse Functional Object Property
Axiom
Query
CONSTRUCT {
?resource owl:sameAs ?individual .
}
WHERE {
?resource ?invFunctionalProperty ?o .
?individual ?invFunctionalProperty ?o .
?invFunctionalProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty .
}
Explanation
Since invFunctionalProperty is an inverse functional property, and resource and individual both have the relationship invFunctionalProperty o, then we can infer that resource is the same as individual.
Example
sio:hasAttribute rdf:type owl:ObjectProperty ;
rdfs:label "has attribute" ;
dct:description "has attribute is a relation that associates a entity with an attribute where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:hasProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has property" ;
owl:inverseOf sio:isPropertyOf ;
dct:description "has property is a relation between an entity and the quality, capability or role that it and it alone bears." ;
rdfs:subPropertyOf sio:hasAttribute .
sio:Entity rdf:type owl:Class ;
rdfs:label "entity" ;
dct:description "Every thing is an entity." .
sio:Object rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "object" ;
dct:description "An object is an entity that is wholly identifiable at any instant of time during which it exists." .
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sio:Representation rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
dct:description "A representation is a entity that in some way represents another entity (or attribute thereof)." ;
rdfs:label "representation" .
sio:Symbol rdf:type owl:Class ;
rdfs:subClassOf sio:Representation ;
dct:description "A symbol is a proposition about what an entity represents." ;
rdfs:label "symbol" .
sets:MolecularFormula rdfs:subClassOf sio:Symbol ;
rdfs:label "molecular formula" .
sets-kb:Water sio:hasProperty sets-kb:H2O ;
rdfs:label "water" .
sets-kb:HyrdogenDioxide sio:hasProperty sets-kb:H2O ;
rdfs:label "hydrogen dioxide" .
sets-kb:H2O rdf:type sets:MolecularFormula ;
rdfs:label "H2O" .
A reasoner should infer sets-kb:Water owl:sameAs sets-kb:HyrdogenDioxide .
Domain & Range Restrictions
Property Domain
Axiom
Query
CONSTRUCT {
?resource rdf:type ?class .
}
WHERE {
?resource ?p ?o .
?p rdfs:domain ?class .
}
Explanation
Since the domain of p is class, this implies that resource is a class.
Example
sio:Role rdf:type owl:Class ;
rdfs:label "role" ;
rdfs:subClassOf sio:RealizableEntity ;
dct:description "A role is a realizable entity that describes behaviours, rights and obligations of an entity in some particular circumstance." .
sio:isAttributeOf rdf:type owl:ObjectProperty ;
rdfs:label "is attribute of" ;
dct:description "is attribute of is a relation that associates an attribute with an entity where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:hasAttribute rdf:type owl:ObjectProperty ;
rdfs:label "has attribute" ;
dct:description "has attribute is a relation that associates a entity with an attribute where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:isPropertyOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is property of" ;
dct:description "is property of is a relation betweena quality, capability or role and the entity that it and it alone bears." ;
rdfs:subPropertyOf sio:isAttributeOf .
sio:hasProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has property" ;
owl:inverseOf sio:isPropertyOf ;
dct:description "has property is a relation between an entity and the quality, capability or role that it and it alone bears." ;
rdfs:subPropertyOf sio:hasAttribute .
sio:hasRealizableProperty rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has realizable property" ;
rdfs:subPropertyOf sio:hasProperty .
sio:isRealizablePropertyOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is realizable property of" ;
rdfs:subPropertyOf sio:isPropertyOf ;
owl:inverseOf sio:hasRealizableProperty .
sio:isRoleOf rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "is role of" ;
rdfs:domain sio:Role ;
rdfs:subPropertyOf sio:isRealizablePropertyOf ;
dct:description "is role of is a relation between a role and the entity that it is a property of." ;
owl:inverseOf sio:hasRole .
sio:hasRole rdf:type owl:ObjectProperty ,
owl:InverseFunctionalProperty;
rdfs:label "has role" ;
rdfs:subPropertyOf sio:hasRealizableProperty ;
dct:description "has role is a relation between an entity and a role that it bears." .
sio:Human rdf:type owl:Class ;
rdfs:label "human" ;
rdfs:subClassOf sio:MulticellularOrganism ;
dct:description "A human is a primates of the family Hominidae and are characterized by having a large brain relative to body size, with a well developed neocortex, prefrontal cortex and temporal lobes, making them capable of abstract reasoning, language, introspection, problem solving and culture through social learning." .
sio:MulticellularOrganism rdf:type owl:Class ;
rdfs:label "multicellular organism" ;
rdfs:subClassOf sio:CellularOrganism ;
dct:description "A multi-cellular organism is an organism that consists of more than one cell." .
sio:CellularOrganism rdf:type owl:Class ;
rdfs:label "cellular organism" ;
rdfs:subClassOf sio:Organism ;
dct:description "A cellular organism is an organism that contains one or more cells." .
sio:Non-cellularOrganism rdf:type owl:Class ;
rdfs:label "non-cellular organism" ;
rdfs:subClassOf sio:Organism ;
dct:description "A non-cellular organism is an organism that does not contain a cell." .
sio:Organism rdf:type owl:Class ;
owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf ( sio:CellularOrganism sio:Non-cellularOrganism ) ] ;
rdfs:subClassOf sio:BiologicalEntity ;
dct:description "A biological organisn is a biological entity that consists of one or more cells and is capable of genomic replication (independently or not)." ;
rdfs:label "organism" .
sio:BiologicalEntity rdf:type owl:Class ;
rdfs:label "biological entity" ;
rdfs:subClassOf sio:HeterogeneousSubstance ;
dct:description "A biological entity is a heterogeneous substance that contains genomic material or is the product of a biological process." .
sio:HeterogeneousSubstance rdf:type owl:Class ;
rdfs:label "heterogeneous substance" ;
rdfs:subClassOf sio:MaterialEntity ;
rdfs:subClassOf sio:ChemicalEntity ;
dct:description "A heterogeneous substance is a chemical substance that is composed of more than one different kind of component." .
sio:MaterialEntity rdf:type owl:Class ;
rdfs:label "material entity" ;
rdfs:subClassOf sio:Object ;
dct:description "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." .
sio:ChemicalEntity rdf:type owl:Class ;
rdfs:label "chemical entity" ;
rdfs:subClassOf sio:MaterialEntity ;
dct:description "A chemical entity is a material entity that pertains to chemistry." .
sets-kb:Mother rdf:type owl:Individual ;
rdfs:label "mother" ;
sio:isRoleOf sets-kb:Sarah ;
sio:inRelationTo sets-kb:Tim .
sets-kb:Sarah rdf:type sio:Human ;
rdfs:label "Sarah" .
sets-kb:Tim rdf:type sio:Human ;
rdfs:label "Tim" .
A reasoner should infer sets-kb:Mother rdf:type sio:Role .
and/or sets-kb:Sarah sio:hasRole sets-kb:Mother .
Property Range
Axiom
Query
CONSTRUCT {
?o rdf:type ?class .
}
WHERE {
?resource ?p ?o .
?p rdfs:range ?class .
}
Explanation
Since the range of p is class, this implies that o is a class.
Example
sio:UnitOfMeasurement rdf:type owl:Class ;
rdfs:label "unit of measurement" ;
rdfs:subClassOf sio:Quantity ;
dct:description "A unit of measurement is a definite magnitude of a physical quantity, defined and adopted by convention and/or by law, that is used as a standard for measurement of the same physical quantity." .
sio:hasUnit rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "has unit" ;
owl:inverseOf sio:isUnitOf ;
rdfs:range sio:UnitOfMeasurement ;
rdfs:subPropertyOf sio:hasAttribute ;
dct:description "has unit is a relation between a quantity and the unit it is a multiple of." .
sio:isUnitOf rdf:type owl:ObjectProperty ;
rdfs:label "is unit of" ;
rdfs:domain sio:UnitOfMeasurement ;
rdfs:subPropertyOf sio:isAttributeOf ;
dct:description "is unit of is a relation between a unit and a quantity that it is a multiple of." .
sio:Height rdf:type owl:Class ;
rdfs:label "height" ;
rdfs:subClassOf sio:1DExtentQuantity ;
dct:description "Height is the one dimensional extent along the vertical projection of a 3D object from a base plane of reference." .
sio:1DExtentQuantity rdf:type owl:Class ;
rdfs:label "1D extent quantity" ;
rdfs:subClassOf sio:SpatialQuantity ;
dct:description "A quantity that extends in single dimension." .
sio:SpatialQuantity rdf:type owl:Class ;
rdfs:label "spatial quantity" ;
rdfs:subClassOf sio:DimensionalQuantity ;
dct:description "A spatial quantity is a quantity obtained from measuring the spatial extent of an entity." .
sio:DimensionalQuantity rdf:type owl:Class ;
rdfs:label "dimensional quantity" ;
rdfs:subClassOf sio:Quantity ,
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasUnit ;
owl:someValuesFrom sio:UnitOfMeasurement ] ;
dct:description "A dimensional quantity is a quantity that has an associated unit." .
sets-kb:Tom rdf:type sio:Human ;
rdfs:label "Tom" ;
sio:hasAttribute sets-kb:HeightOfTom .
sets-kb:HeightOfTom rdf:type sio:Height ;
sio:hasUnit sets-kb:Meter .
sets-kb:Meter rdf:type owl:Individual ;
rdfs:label "meter" .
A reasoner should infer sets-kb:Meter rdf:type sio:UnitOfMeasurement .
Datatype
Datatype Restriction
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?dataProperty ?value .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:someValuesFrom ?datatype ] .
?dataProperty rdf:type owl:DatatypeProperty .
?datatype rdf:type rdfs:Datatype ;
owl:onDatatype ?restrictedDatatype ;
owl:withRestrictions ?list .
{
?list rdf:first ?min .
?list rdf:rest/rdf:first ?max .
?min xsd:minInclusive ?minValue .
?max xsd:maxInclusive ?maxValue .
}
UNION
{
?list rdf:first ?max .
?list rdf:rest/rdf:first ?min .
?min xsd:minInclusive ?minValue .
?max xsd:maxInclusive ?maxValue .
}
FILTER(?value < ?minValue || ?value > ?maxValue)
}
Explanation
Since class has a with restriction on datatype property dataProperty to be within the range specified in list with min value minValue and max value maxValue, and resource is of type class and has a value value for dataProperty which is outside the specified range, an inconsistency occurs.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sio:ProbabilityMeasure rdf:type owl:Class ;
rdfs:subClassOf sio:DimensionlessQuantity ;
dct:description "A probability measure is quantity of how likely it is that some event will occur." ;
rdfs:label "probability measure" .
sio:ProbabilityValue rdf:type owl:Class ;
rdfs:subClassOf sio:ProbabilityMeasure ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom
[ rdf:type rdfs:Datatype ;
owl:onDatatype xsd:double ;
owl:withRestrictions ( [ xsd:minInclusive "0.0"^^xsd:double ] [ xsd:maxInclusive "1.0"^^xsd:double ] )
]
] ;
dct:description "A p-value or probability value is the probability of obtaining a test statistic at least as extreme as the one that was actually observed, assuming that the null hypothesis is true" ;
#<sio:hasSynonym xml:lang="en">p-value</sio:hasSynonym>
rdfs:label "probability value" .
sets-kb:EffortExerted rdf:type sio:ProbabilityValue ;
rdfs:label "effort exerted" ;
sio:hasValue "1.1"^^xsd:double .
A reasoner should infer sets-kb:EffortExerted rdf:type owl:Nothing .
or that an inconsistency occurs.
Assertions
Same Individual
Axiom
Query
CONSTRUCT {
?individual ?p ?o .
}
WHERE {
{
?resource owl:sameAs ?individual .
}
UNION
{
?individual owl:sameAs ?resource .
}
?resource ?p ?o .
}
Explanation
Since resource is the same as individual, they share the same properties.
Example
sets-kb:Peter rdf:type sio:Human ;
rdfs:label "Peter" ;
sio:isRelatedTo sets-kb:Samantha .
sets-kb:Samantha rdf:type sio:Human ;
rdfs:label "Samantha" .
sets-kb:Peter owl:sameAs sets-kb:Pete .
A reasoner should infer sets-kb:Pete rdf:type sio:Human ; rdfs:label "Peter" ; sio:isRelatedTo sets-kb:Samantha .
Different Individuals
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
{
?resource owl:differentFrom ?individual .
}
UNION
{
?individual owl:differentFrom ?resource .
}
?resource owl:sameAs ?individual .
}
Explanation
Since resource is asserted as being different from individual, the assertion that resource is the same as individual leads to an inconsistency.
Example
sets-kb:Sam owl:differentFrom sets-kb:Samantha .
sets-kb:Sam owl:sameAs sets-kb:Samantha .
A reasoner should infer sets-kb:Sam rdf:type owl:Nothing .
or that an inconsistency occurs.
All Different Individuals
Axiom
Query
CONSTRUCT {
?member owl:differentFrom ?item .
}
WHERE {
?restriction rdf:type owl:AllDifferent ;
owl:distinctMembers ?list .
?list rdf:rest*/rdf:first ?member .
{
SELECT DISTINCT ?item ?restrict WHERE
{
?restrict rdf:type owl:AllDifferent ;
owl:distinctMembers ?list .
?list rdf:rest*/rdf:first ?item .
}
}
BIND(?restriction AS ?restrict)
FILTER(?member != ?item)
}
Explanation
Since restriction is an all different restriction with individuals listed in list, each member in list is different from each other member in the list.
Example
sets-kb:DistinctTypesRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
( sets-kb:Integer
sets-kb:String
sets-kb:Boolean
sets-kb:Double
sets-kb:Float
sets-kb:Tuple
) .
A reasoner should infer
sets-kb:Integer owl:differentFrom
sets-kb:String , sets-kb:Boolean, sets-kb:Double , sets-kb:Float , sets-kb:Tuple .
sets-kb:String owl:differentFrom
sets-kb:Integer , sets-kb:Boolean, sets-kb:Double, sets-kb:Float , sets-kb:Tuple .
sets-kb:Boolean owl:differentFrom
sets-kb:Integer , sets-kb:String, sets-kb:Double, sets-kb:Float , sets-kb:Tuple .
sets-kb:Double owl:differentFrom
sets-kb:Integer , sets-kb:String , sets-kb:Boolean, sets-kb:Float , sets-kb:Tuple .
sets-kb:Float owl:differentFrom
sets-kb:Integer , sets-kb:String , sets-kb:Boolean, sets-kb:Double , sets-kb:Tuple .
sets-kb:Tuple owl:differentFrom
sets-kb:Integer , sets-kb:String , sets-kb:Boolean, sets-kb:Double, sets-kb:Float .
Class Assertion
Axiom
Query
CONSTRUCT {
?resource rdf:type ?superClass .
}
WHERE {
?resource rdf:type ?class .
?class rdf:type owl:Class ;
rdfs:subClassOf+ ?superClass .
}
Explanation
Since class is a subclass of superClass, any individual that is an instance of class is also an instance of superClass. Therefore, resource is an instance of superClass.
Example
sio:Entity rdf:type owl:Class ;
rdfs:label "entity" ;
dct:description "Every thing is an entity." .
sio:Attribute rdf:type owl:Class ;
rdfs:subClassOf sio:Entity ;
rdfs:label "attribute" ;
dct:description "An attribute is a characteristic of some entity." .
sio:RealizableEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Attribute ;
dct:description "A realizable entity is an attribute that is exhibited under some condition and is realized in some process." ;
rdfs:label "realizable entity" .
sio:Quality rdf:type owl:Class ;
rdfs:subClassOf sio:Attribute ;
owl:disjointWith sio:RealizableEntity ;
dct:description "A quality is an attribute that is intrinsically associated with its bearer (or its parts), but whose presence/absence and observed/measured value may vary." ;
rdfs:label "quality" .
sets-kb:Reliable rdf:type sio:Quality ;
rdfs:label "reliable" .
A reasoner should infer sets-kb:Reliable rdf:type sio:Attribute , sio:Entity .
Property Assertion
Axiom
Query
CONSTRUCT {
}
WHERE {
}
Explanation
Example
A reasoner should infer ` `
Object Property Assertion
Axiom
Query
CONSTRUCT {
}
WHERE {
}
Explanation
Example
A reasoner should infer ` `
Data Property Assertion
Axiom
Query
CONSTRUCT {
}
WHERE {
}
Explanation
Example
A reasoner should infer ` `
Negative Object Property Assertion
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?p ?o.
?p rdf:type owl:ObjectProperty .
?x rdf:type owl:NegativePropertyAssertion ;
owl:sourceIndividual ?resource ;
owl:assertionProperty ?p ;
owl:targetIndividual ?o .
}
Explanation
Since a negative object property assertion was made with source resource, object property p, and target individual o, the existence of resource p o results in an inconsistency.
Example
sio:hasAttribute rdf:type owl:ObjectProperty ;
rdfs:label "has attribute" ;
dct:description "has attribute is a relation that associates a entity with an attribute where an attribute is an intrinsic characteristic such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier) either directly or indirectly through generalization of entities of the same type." ;
rdfs:subPropertyOf sio:isRelatedTo .
sio:hasUnit rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "has unit" ;
owl:inverseOf sio:isUnitOf ;
rdfs:range sio:UnitOfMeasurement ;
rdfs:subPropertyOf sio:hasAttribute ;
dct:description "has unit is a relation between a quantity and the unit it is a multiple of." .
sets-kb:AgeOfSamantha rdf:type sio:Age ;
rdfs:label "Samantha's age" .
sets-kb:NOPA rdf:type owl:NegativePropertyAssertion ;
owl:sourceIndividual sets-kb:AgeOfSamantha ;
owl:assertionProperty sio:hasUnit ;
owl:targetIndividual sets-kb:Meter .
sets-kb:AgeOfSamantha sio:hasUnit sets-kb:Meter .
A reasoner should infer sets-kb:AgeOfSamantha rdf:type owl:Nothing .
or that an inconsistency occurs.
Negative Data Property Assertion
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?p ?o.
?p rdf:type owl:DatatypeProperty .
?x rdf:type owl:NegativePropertyAssertion ;
owl:sourceIndividual ?resource ;
owl:assertionProperty ?p ;
owl:targetValue ?o .
}
Explanation
Since a negative datatype property assertion was made with source resource, datatype property p, and target value o, the existence of resource p o results in an inconsistency.
Example
sets-kb:NDPA rdf:type owl:NegativePropertyAssertion ;
owl:sourceIndividual sets-kb:AgeOfPeter ;
owl:assertionProperty sio:hasValue ;
owl:targetValue "10" .
sets-kb:AgeOfPeter rdf:type sio:Age;
rdfs:label "Peter's age" ;
sio:hasValue "10" .
A reasoner should infer sets-kb:AgeOfPeter rdf:type owl:Nothing .
or that an inconsistency occurs.
Keys
Axiom
Query
CONSTRUCT {
?resource owl:sameAs ?individual .
}
WHERE {
?resource rdf:type ?class ;
?keyProperty ?keyValue.
?class rdf:type owl:Class ;
owl:hasKey ( ?keyProperty ) .
?individual rdf:type ?class ;
?keyProperty ?keyValue.
}
Explanation
Since class has key keyProperty, resource and individual are both of type class, and resource and individual both keyProperty keyValue, then resource and individual must be the same.
Example
sets:uniqueID rdf:type owl:DatatypeProperty ;
rdfs:label "unique identifier" .
sets:Person rdf:type owl:Class ;
rdfs:subClassOf sio:Human ;
rdfs:label "person" ;
owl:hasKey ( sets:uniqueID ) .
sets-kb:John rdf:type sets:Person ;
rdfs:label "John" ;
sets:uniqueID "101D" .
sets-kb:Jack rdf:type sets:Person ;
rdfs:label "Jack" ;
sets:uniqueID "101D" .
A reasoner should infer sets-kb:John owl:sameAs sets-kb:Jack .
Existential Quantification
Object Some Values From
Axiom
Query
CONSTRUCT {
?resource rdf:type ?class .
}
WHERE {
?resource ?objectProperty
[ rdf:type ?valueclass ] .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction;
owl:onProperty ?objectProperty;
owl:someValuesFrom ?valueclass ] .
}
Explanation
Since resource objectProperty an instance of valueclass, and class has a restriction on objectProperty to have some values from valueclass, we can infer that resource rdf:type class.
Example
sio:CollectionOf3dMolecularStructureModels rdf:type owl:Class ;
rdfs:subClassOf sio:Collection ,
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasMember ;
owl:someValuesFrom sio:3dStructureModel ] ;
rdfs:label "collection of 3d molecular structure models" ;
dct:description "A collection of 3D molecular structure models is just that." .
sio:3dStructureModel rdf:type owl:Class ;
rdfs:subClassOf sio:TertiaryStructureDescriptor ;
rdfs:label "3d structure model" ;
dct:description "A 3D structure model is a representation of the spatial arrangement of one or more chemical entities." .
sio:TertiaryStructureDescriptor rdf:type owl:Class ;
rdfs:subClassOf sio:BiomolecularStructureDescriptor ;
rdfs:label "tertiary structure descriptor" ;
dct:description "A tertiary structure descriptor describes 3D topological patterns in a biopolymer." .
sio:BiomolecularStructureDescriptor rdf:type owl:Class ;
rdfs:subClassOf sio:MolecularStructureDescriptor ;
rdfs:label "biomolecular structure descriptor" ;
dct:description "A biomolecular structure descriptor is structure description for organic compounds." .
sio:MolecularStructureDescriptor rdf:type owl:Class ;
rdfs:subClassOf sio:ChemicalQuality ;
rdfs:label "molecular structure descriptor" ;
dct:description "A molecular structure descriptor is data that describes some aspect of the molecular structure (composition) and is about some chemical entity." .
sio:ChemicalQuality rdf:type owl:Class ;
rdfs:subClassOf sio:ObjectQuality ;
rdfs:label "chemical quality" ;
dct:description "Chemical quality is the quality of a chemical entity." .
sio:ObjectQuality rdf:type owl:Class ;
rdfs:subClassOf sio:Quality ;
rdfs:label "object quality" ;
dct:description "An object quality is quality of an object." .
sets-kb:MolecularCollection rdf:type owl:Individual ;
rdfs:label "molecular collection" ;
sio:hasMember sets-kb:WaterMolecule .
sets-kb:WaterMolecule rdf:type sio:3dStructureModel .
A reasoner should infer sets-kb:MolecularCollection rdf:type sio:CollectionOf3dMolecularStructureModels .
Data Some Values From
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?datatypeProperty ?val .
?datatypeProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:someValuesFrom ?value ] .
FILTER(DATATYPE(?val) != ?value)
}
Explanation
resource datatypeProperty val, but val does not have the same datatype value restricted for datatypeProperty in class. Since resource rdf:type class, an inconsistency occurs.
Example
sets:Text rdf:type owl:Class ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:string ] .
sets-kb:Question rdf:type sets:Text ;
sio:hasValue "4"^^xsd:integer .
A reasoner should infer sets-kb:Question rdf:type owl:Nothing .
or that an inconsistency occurs.
Object Has Value
Axiom
Query
CONSTRUCT {
?resource ?objectProperty ?object .
}
WHERE {
?resource rdf:type ?class .
?objectProperty rdf:type owl:ObjectProperty.
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:hasValue ?object ] .
}
Explanation
Since resource is of type class, which has a value restriction on objectProperty to have object, we can infer that resource objectProperty object.
Example
sio:isRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:label "is related to" ;
dct:description "A is related to B iff there is some relation between A and B." .
sio:isSpatiotemporallyRelatedTo rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:subPropertyOf sio:isRelatedTo ;
rdfs:label "is spatiotemporally related to" ;
dct:description "A is spatiotemporally related to B iff A is in the spatial or temporal vicinity of B" .
sio:isLocationOf rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ;
rdfs:subPropertyOf sio:isSpatiotemporallyRelatedTo ;
rdfs:label "is location of" ;
dct:description "A is location of B iff the spatial region occupied by A has the spatial region occupied by B as a part." .
sio:hasPart rdf:type owl:ObjectProperty ,
owl:TransitiveProperty ,
owl:ReflexiveProperty ;
rdfs:subPropertyOf sio:isLocationOf ;
owl:inverseOf sio:isPartOf ;
rdfs:label "has part" ;
dct:description "has part is a transitive, reflexive and antisymmetric relation between a whole and itself or a whole and its part" .
sets:Vehicle rdf:type owl:Class ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasPart ;
owl:hasValue sets-kb:Wheel ] .
sets-kb:Car rdf:type sets:Vehicle ;
sio:hasPart sets-kb:Mirror .
sets-kb:Mirror owl:differentFrom sets-kb:Wheel .
A reasoner should infer sets-kb:Car sio:hasPart sets-kb:Wheel .
Data Has Value
Axiom
Query
CONSTRUCT {
?resource rdf:type ?class .
}
WHERE {
?resource ?datatypeProperty ?value.
?datatypeProperty rdf:type owl:DatatypeProperty .
?class owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:hasValue ?value ].
}
Explanation
Since class is equivalent to the restriction on datatypeProperty to have value value and resource datatypeProperty value, we can infer that resource rdf:type class.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sets:hasAge rdf:type owl:DatatypeProperty ;
rdfs:label "has age" ;
rdfs:subPropertyOf sio:hasValue .
sets:Unliked rdf:type owl:Class ;
owl:equivalentClass#rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sets:hasAge ;
owl:hasValue "23"^^xsd:integer ] .
sets-kb:Tom sets:hasAge "23"^^xsd:integer .
A reasoner should infer sets-kb:Tom rdf:type sets:Unliked .
Universal Quantification
Object All Values From
Axiom
Query
CONSTRUCT {
?resource rdf:type ?valueclass.
}
WHERE {
?individual rdf:type ?class ;
?objectProperty ?resource .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction;
owl:onProperty ?objectProperty;
owl:allValuesFrom ?valueclass ] .
}
Explanation
Since class has a restriction on objectProperty to have all values from valueclass, individual rdf:type class, and individual objectProperty resource, we can infer that resource rdf:type valueclass.
Example
sio:Namespace rdf:type owl:Class ;
rdfs:subClassOf sio:ComputationalEntity ,
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasMember ;
owl:allValuesFrom sio:Identifier ] ;
rdfs:label "namespace" ;
dct:description "A namespace is an informational entity that defines a logical container for a set of symbols or identifiers." .
sio:ComputationalEntity rdf:type owl:Class;
rdfs:subClassOf sio:InformationContentEntity ;
rdfs:label "computational entity" ;
dct:description "A computational entity is an information content entity operated on using some computational system." .
sets-kb:NamespaceInstance rdf:type sio:Namespace ;
sio:hasMember sets-kb:NamespaceID .
A reasoner should infer sets-kb:NamespaceID rdf:type sio:Identifier .
Data All Values From
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?datatypeProperty ?val .
?datatypeProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:allValuesFrom ?value ] .
FILTER(DATATYPE(?val)!= ?value)
}
Explanation
resource datatypeProperty val, but val does not have the same datatype value restricted for datatypeProperty in class. Since resource rdf:type class, an inconsistency occurs.
Example
sets:Integer rdf:type owl:Class ;
rdfs:subClassOf sio:ComputationalEntity ,
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:allValuesFrom xsd:integer ] ;
rdfs:label "integer" .
sets-kb:Ten rdf:type sets:Integer ;
sio:hasValue "10.1"^^xsd:float .
A reasoner should infer sets-kb:Ten rdf:type owl:Nothing .
or than an inconsistency occurs.
Self Restriction
Object Has Self
Axiom
Query
CONSTRUCT {
?resource ?objectProperty ?resource .
}
WHERE {
?resource rdf:type ?class .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:hasSelf \"true\"^^xsd:boolean ] .
}
Explanation
resource is of type class, which has a self restriction on the property objectProperty, allowing us to infer resource objectProperty resource.
Example
sets:SelfAttributing rdf:type owl:Class ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasAttribute ;
owl:hasSelf "true"^^xsd:boolean ] .
sets-kb:Blue rdf:type sets:SelfAttributing .
A reasoner should infer sets-kb:Blue sio:hasAttribute sets-kb:Blue .
Individual Enumeration
Object One Of
Axiom
Object One Of Membership
Query
CONSTRUCT {
?member rdf:type ?resource .
}
WHERE {
?resource rdf:type owl:Class ;
owl:oneOf ?list .
?list rdf:rest*/rdf:first ?member .
}
Explanation
Since resource has a one of relationship with list, the member member in list is of type resource.
Example
sets:Type rdf:type owl:Class ;
owl:oneOf (sets-kb:Integer sets-kb:String sets-kb:Boolean sets-kb:Double sets-kb:Float) .
sets-kb:DistinctTypesRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
( sets-kb:Integer
sets-kb:String
sets-kb:Boolean
sets-kb:Double
sets-kb:Float
sets-kb:Tuple
) .
A reasoner should infer sets-kb:Integer rdf:type sets:Type . sets-kb:String rdf:type sets:Type . sets-kb:Boolean rdf:type sets:Type . sets-kb:Double rdf:type sets:Type . sets-kb:Float rdf:type sets:Type .
Object One Of Inconsistency
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?class rdf:type owl:Class ;
owl:oneOf ?list .
?list rdf:rest*/rdf:first ?member .
?resource rdf:type ?class .
{
SELECT DISTINCT (COUNT(DISTINCT ?concept) AS ?conceptCount)
WHERE
{
?concept rdf:type owl:Class ;
owl:oneOf ?list .
?individual rdf:type ?concept .
?list rdf:rest*/rdf:first ?member .
FILTER(?individual = ?member)
}
}
FILTER(?conceptCount=0)
}
Explanation
Since class has a one of relationship with list, and resource is not in list, the assertion resource is a class leads to an inconsistency.
Example
sets:Type rdf:type owl:Class ;
owl:oneOf (sets-kb:Integer sets-kb:String sets-kb:Boolean sets-kb:Double sets-kb:Float) .
sets-kb:DistinctTypesRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
( sets-kb:Integer
sets-kb:String
sets-kb:Boolean
sets-kb:Double
sets-kb:Float
sets-kb:Tuple
) .
sets-kb:Tuple rdf:type sets:Type .
A reasoner should infer sets-kb:Tuple rdf:type owl:Nothing .
or that an inconsistency occurs.
Data One Of
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?datatypeProperty rdf:type owl:DatatypeProperty ;
rdfs:range [ rdf:type owl:DataRange ;
owl:oneOf ?list ] .
?resource ?datatypeProperty ?value .
?list rdf:rest*/rdf:first ?member .
{
SELECT DISTINCT (COUNT( DISTINCT ?datatypeProperty) AS ?dataCount)
WHERE
{
?datatypeProperty rdf:type owl:DatatypeProperty ;
rdfs:range [ rdf:type owl:DataRange ;
owl:oneOf ?list ] .
?individual ?datatypeProperty ?value .
?list rdf:rest*/rdf:first ?member .
FILTER(?value=?member)
}
}
FILTER(?dataCount=0)
}
Explanation
Since datatypeProperty is restricted to have a value from list, and resource datatypeProperty value, but value is not in list, an inconsistency occurs.
Example
sets:hasTeenAge rdf:type owl:DatatypeProperty ;
rdfs:label "has age" ;
rdfs:range [ rdf:type owl:DataRange ;
owl:oneOf ("13"^^xsd:integer "14"^^xsd:integer "15"^^xsd:integer "16"^^xsd:integer "17"^^xsd:integer "18"^^xsd:integer "19"^^xsd:integer )].
sets-kb:Sarah sets:hasTeenAge "12"^^xsd:integer .
A reasoner should infer sets-kb:Sarah rdf:type owl:Nothing .
or that an inconsistency occurs.
Cardinality
Max Cardinality
Axiom
Object Max Cardinality
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:maxCardinality ?cardinalityValue ].
{
SELECT DISTINCT (COUNT(DISTINCT ?object) AS ?objectCount) ?individual ?concept
WHERE
{
?individual rdf:type ?concept ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?concept rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:maxCardinality ?cardinalityValue ].
} GROUP BY ?individual ?concept
}
BIND(?resource AS ?individual)
BIND(?class AS ?concept)
FILTER(?objectCount > ?cardinalityValue)
}
Explanation
Since objectProperty is assigned a maximum cardinality of cardinalityValue for class class, resource rdf:type class, and resource has objectCount distinct assignments of objectProperty which is greater than cardinalityValue, we can conclude that there is an inconsistency associated with resource.
Example
sets:DeadlySins rdf:type owl:Class ;
rdfs:subClassOf sio:Collection ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasMember ;
owl:maxCardinality "7"^^xsd:integer ] ;
rdfs:label "seven deadly sins" .
sets-kb:SevenDeadlySins rdf:type sets:DeadlySins ;
sio:hasMember
sets-kb:Pride ,
sets-kb:Envy ,
sets-kb:Gluttony ,
sets-kb:Greed ,
sets-kb:Lust ,
sets-kb:Sloth ,
sets-kb:Wrath ,
sets-kb:Redundancy .
sets-kb:DistinctSinsRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
(sets-kb:Pride
sets-kb:Envy
sets-kb:Gluttony
sets-kb:Greed
sets-kb:Lust
sets-kb:Sloth
sets-kb:Wrath
sets-kb:Redundancy ) .
Data Max Cardinality
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:maxCardinality ?cardinalityValue ] .
{
SELECT DISTINCT (COUNT(DISTINCT ?data) AS ?dataCount)
WHERE
{
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:maxCardinality ?cardinalityValue ].
}
}
FILTER(?dataCount > ?cardinalityValue)
}
Explanation
Since datatypeProperty is assigned a maximum cardinality of cardinalityValue for class class, resource rdf:type class, and resource has dataCount distinct assignments of datatypeProperty which is greater than cardinalityValue, we can conclude that there is an inconsistency associated with resource.
Example
sets:hasAge rdf:type owl:DatatypeProperty ;
rdfs:label "has age" ;
rdfs:subPropertyOf sio:hasValue .
sets:Person rdf:type owl:Class ;
rdfs:label "person" ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sets:hasAge ;
owl:maxCardinality "1"^^xsd:integer ] .
sets-kb:Katie rdf:type sets:Person ;
rdfs:label "Katie" ;
sets:hasAge "31"^^xsd:integer , "34"^^xsd:integer .
Object Max Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?object rdf:type ?restrictedClass .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:onClass ?restrictedClass ;
owl:maxQualifiedCardinality ?cardinalityValue ].
{
SELECT DISTINCT (COUNT(DISTINCT ?object) AS ?objectCount) ?individual ?concept
WHERE
{
?individual rdf:type ?concept ;
?objectProperty ?object .
?object rdf:type ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?concept rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:onClass ?restrictedClass ;
owl:maxQualifiedCardinality ?cardinalityValue ].
} GROUP BY ?individual ?concept
}
BIND(?resource AS ?individual)
BIND(?class AS ?concept)
FILTER(?objectCount > ?cardinalityValue)
}
Explanation Since class is constrained with a qualified max cardinality restriction on property objectProperty to have a max of value objects of type class restrictedClass, and resource is a class but has objectCount objects assigned to objectProperty which is more than value, we can infer that an inconsistency occurs.
Example
sio:hasComponentPart rdf:type owl:ObjectProperty ;
rdfs:label "has component part" .
sio:Triangle rdf:type owl:Class ;
rdfs:subClassOf sio:Polygon ;
dct:description "A triangle is a polygon composed of three points and three line segments, in which each point is fully connected to another point along through the line segment." ;
rdfs:label "triangle" .
sio:LineSegment rdf:type owl:Class ;
rdfs:subClassOf sio:Line ;
dct:description "A line segment is a line and a part of a curve that is (inclusively) bounded by two terminal points." ;
rdfs:label "line segment" .
sio:DirectedLineSegment rdf:type owl:Class ;
rdfs:subClassOf sio:LineSegment ;
dct:description "A directed line segment is a line segment that is contained by an ordered pair of endpoints (a start point and an endpoint)." ;
rdfs:label "directed line segment" .
sio:ArrowedLineSegment rdf:type owl:Class ;
rdfs:subClassOf sio:DirectedLineSegment ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasPart ;
owl:someValuesFrom sio:Triangle ] ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasComponentPart ;
owl:maxQualifiedCardinality "2"^^xsd:nonNegativeInteger ;
owl:onClass sio:Triangle ] ;
dct:description "An arrowed line is a directed line segment in which one or both endpoints is tangentially part of a triangle that bisects the line." ;
rdfs:label "arrowed line segment" .
sets-kb:TripleArrowLineSegment rdf:type sio:ArrowedLineSegment ;
rdfs:label "triple arrow line segment" ;
sio:hasComponentPart
sets-kb:LineSegment ,
sets-kb:FirstArrow ,
sets-kb:SecondArrow ,
sets-kb:ThirdArrow .
sets-kb:FirstArrow rdf:type sio:Triangle ;
rdfs:label "first arrow" .
sets-kb:SecondArrow rdf:type sio:Triangle ;
rdfs:label "second arrow" .
sets-kb:ThirdArrow rdf:type sio:Triangle ;
rdfs:label "third arrow" .
sets-kb:LineSegment rdf:type sio:LineSegment ;
rdfs:label "line segment " .
sets-kb:DistinctTrianglesRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers (sets-kb:FirstArrow sets-kb:SecondArrow sets-kb:ThirdArrow ) .
Data Max Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:maxQualifiedCardinality ?cardinalityValue ;
owl:onDataRange ?datatype .
{
SELECT (COUNT(DISTINCT ?value) AS ?valueCount) ?individual WHERE
{
?individual ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:maxQualifiedCardinality ?cardinalityValue ;
owl:onDataRange ?datatype .
} GROUP BY ?individual
}
BIND(?resource AS ?individual)
FILTER(DATATYPE(?value) = ?datatype)
FILTER(?valueCount > ?cardinalityValue)
}
Explanation Since datatypeProperty is constrained with a qualified max cardinality restriction on datatype datatype to have a max of cardinalityValue values, and resource has valueCount values of type datatype for property datatypeProperty, an inconsistency occurs.
Example
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sio:MathematicalEntity rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
rdfs:label "mathematical entity" ;
dct:description "A mathematical entity is an information content entity that are components of a mathematical system or can be defined in mathematical terms." .
sets:hasPolynomialRoot rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf sio:hasValue ;
rdfs:label "has polynomial root" .
sets-kb:QuadraticPolynomialRootRestriction rdf:type owl:Restriction ;
owl:onProperty sets:hasPolynomialRoot ;
owl:maxQualifiedCardinality "2"^^xsd:integer ;
owl:onDataRange xsd:decimal .
sets-kb:QuadraticPolynomialInstance rdf:type sio:ConceptualEntity ;
rdfs:label "quadratic polynomial instance" ;
sets:hasPolynomialRoot "1.23"^^xsd:decimal , "3.45"^^xsd:decimal , "5.67"^^xsd:decimal .
Min Cardinality
Axiom
Object Min Cardinality
Query
CONSTRUCT {
?resource ?objectProperty
[ rdf:type owl:Individual ;
owl:differentFrom ?object ] .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:minCardinality ?cardinalityValue ].
{
SELECT DISTINCT (COUNT(DISTINCT ?object) AS ?objectCount)
WHERE
{
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:minCardinality ?cardinalityValue ].
}
}
FILTER(?objectCount < ?cardinalityValue)
}
Explanation
Since objectProperty is assigned a minimum cardinality of cardinalityValue for class class, resource rdf:type class, and resource has objectCount distinct assignments of objectProperty which is less than cardinalityValue, we can conclude the existence of additional assignments of objectProperty for resource.
Example
sets:StudyGroup rdf:type owl:Class ;
rdfs:subClassOf sio:Collection ,
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasMember ;
owl:minCardinality "3"^^xsd:integer ] ;
rdfs:label "study group" .
sets-kb:StudyGroupInstance rdf:type sets:StudyGroup ;
sio:hasMember
sets-kb:Steve ,
sets-kb:Ali .
sets-kb:Steve rdf:type sio:Human .
sets-kb:Luis rdf:type sio:Human .
sets-kb:Ali rdf:type sio:Human .
sets-kb:DistinctStudentsRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
(sets-kb:Steve
sets-kb:Luis
sets-kb:Ali ) .
Data Min Cardinality
Axiom
Query
CONSTRUCT {
?resource ?dataProperty [ rdf:type rdfs:Datatype ] .
}
WHERE {
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:minCardinality ?cardinalityValue ] .
{
SELECT DISTINCT (COUNT(DISTINCT ?data) AS ?dataCount)
WHERE
{
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:minCardinality ?cardinalityValue ].
}
}
FILTER(?dataCount < ?cardinalityValue)
}
Explanation
Since dataProperty is assigned a minimum cardinality of cardinalityValue for class class, resource rdf:type class, and resource has dataCount distinct assignments of dataProperty which is less than cardinalityValue, we can conclude the existence of additional assignments of dataProperty for resource.
Example
sets:hasBirthYear rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf sio:hasValue ;
rdfs:label "has birth year" .
sets:Person rdf:type owl:Class ;
rdfs:label "person" ;
rdfs:subClassOf sio:Human ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sets:hasBirthYear ;
owl:cardinality "1"^^xsd:integer ] .
sets-kb:Erik rdf:type sets:Person ;
rdfs:label "Erik" ;
sets:hasBirthYear "1988"^^xsd:integer , "1998"^^xsd:integer .
Object Min Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource ?objectProperty
[ rdf:type owl:Individual ;
owl:differentFrom ?object ] .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?object rdf:type ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:minQualifiedCardinality ?value ;
owl:onClass ?restrictedClass ] .
{
SELECT (COUNT(DISTINCT ?object) AS ?objectCount) ?individual ?concept WHERE
{
?individual rdf:type ?concept ;
?objectProperty ?object .
?object rdf:type ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?concept rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:minQualifiedCardinality ?value ;
owl:onClass ?restrictedClass ] .
} GROUP BY ?individual ?concept
}
BIND(?resource AS ?individual)
BIND(?class AS ?concept)
FILTER(?objectCount < ?value)
}
Explanation Since class is constrained with a qualified min cardinality restriction on property objectProperty to have a min of value objects of type class restrictedClass, and resource is a class but has objectCount objects assigned to objectProperty which is less than value, we can infer the existence of another object.
Example
sio:Polyline rdf:type owl:Class ;
rdfs:subClassOf sio:GeometricEntity ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasComponentPart ;
owl:minQualifiedCardinality "2"^^xsd:nonNegativeInteger ;
owl:onClass sio:LineSegment ] ;
dct:description "A polyline is a connected sequence of line segments." ;
rdfs:label "polyline" .
sets-kb:PolylineSegment rdf:type sio:Polyline ;
rdfs:label "polyline segment " ;
sio:hasComponentPart sets-kb:LineSegmentInstance .
sets-kb:LineSegmentInstance rdf:type sio:LineSegment ;
rdfs:label "line segment instance" .
Data Min Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource ?datatypeProperty [ rdf:type rdfs:Datatype ] .
}
WHERE {
?resource ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:minQualifiedCardinality ?cardinalityValue ;
owl:onDataRange ?datatype .
{
SELECT (COUNT(DISTINCT ?value) AS ?valueCount) ?individual WHERE
{
?individual ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:minQualifiedCardinality ?cardinalityValue ;
owl:onDataRange ?datatype .
} GROUP BY ?individual
}
BIND(?resource AS ?individual)
FILTER(DATATYPE(?value) = ?datatype)
FILTER(?valueCount < ?cardinalityValue)
}
Explanation Since datatypeProperty is constrained with a qualified min cardinality restriction on datatype datatype to have a min of cardinalityValue values, and resource has valueCount values of type datatype for property datatypeProperty, we can infer the existence of at least one more additional value.
Example
sets:hasName rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf sio:hasName ;
rdfs:label "has name" .
sets-kb:NameRestriction rdf:type owl:Restriction ;
owl:onProperty sets:hasName ;
owl:minQualifiedCardinality "2"^^xsd:integer ;
owl:onDataRange xsd:string .
sets-kb:Jackson rdf:type sio:Human ;
rdfs:label "Jackson" ;
sets:hasName "Jackson"^^xsd:string .
Exact Cardinality
Axiom
Object Exact Cardinality
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:cardinality ?cardinalityValue ].
{
SELECT DISTINCT (COUNT(DISTINCT ?object) AS ?objectCount)
WHERE
{
?individual rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:cardinality ?cardinalityValue ].
} GROUP BY ?individual
}
FILTER(?objectCount > ?cardinalityValue)
BIND(?resource AS ?individual)
}
Explanation Since objectProperty is assigned an exact cardinality of cardinalityValue for class class, resource rdf:type class, and resource has objectCount distinct assignments of objectProperty which is greater than cardinalityValue, we can conclude that there is an inconsistency associated with resource.
Example
sets:Trio rdf:type owl:Class ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasMember ;
owl:cardinality "2"^^xsd:integer
] .
sets-kb:Stooges rdf:type sets:Trio ;
sio:hasMember
sets-kb:Larry ,
sets-kb:Moe ,
sets-kb:Curly .
sets-kb:DistinctStoogesRestriction rdf:type owl:AllDifferent ;
owl:distinctMembers
( sets-kb:Larry
sets-kb:Moe
sets-kb:Curly ) .
Data Exact Cardinality
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:cardinality ?cardinalityValue ] .
{
SELECT DISTINCT (COUNT(DISTINCT ?data) AS ?dataCount)
WHERE
{
?resource rdf:type ?class ;
?dataProperty ?data .
?dataProperty rdf:type owl:DatatypeProperty .
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:cardinality ?cardinalityValue ].
}
}
FILTER(?dataCount > ?cardinalityValue)
}
Explanation Since dataProperty is assigned an exact cardinality of cardinalityValue for class class, resource rdf:type class, and resource has dataCount distinct assignments of dataProperty which is greater than cardinalityValue, we can conclude that there is an inconsistency associated with resource.
Example
sets:hasBirthYear rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf sio:hasValue ;
rdfs:label "has birth year" .
sets:Person rdf:type owl:Class ;
rdfs:label "person" ;
rdfs:subClassOf sio:Human ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sets:hasBirthYear ;
owl:cardinality "1"^^xsd:integer ] .
sets-kb:Erik rdf:type sets:Person ;
rdfs:label "Erik" ;
sets:hasBirthYear "1988"^^xsd:integer , "1998"^^xsd:integer .
A reasoner should infer sets-kb:Erik rdf:type owl:Nothing .
or that an inconsistency occurs.
Object Exact Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ;
?objectProperty ?object .
?objectProperty rdf:type owl:ObjectProperty .
?object rdf:type ?restrictedClass .
?class rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:onClass ?restrictedClass ;
owl:qualifiedCardinality ?cardinalityValue ].
{
SELECT DISTINCT (COUNT(DISTINCT ?object) AS ?objectCount) ?individual ?concept
WHERE
{
?individual rdf:type ?concept ;
?objectProperty ?object .
?object rdf:type ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?concept rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:onClass ?restrictedClass ;
owl:qualifiedCardinality ?cardinalityValue ].
} GROUP BY ?individual ?concept
}
BIND(?resource AS ?individual)
BIND(?class AS ?concept)
FILTER(?objectCount > ?cardinalityValue)
}
Explanation Since class is constrained with a qualified cardinality restriction on property objectProperty to have value objects of type class restrictedClass, and resource is a class but has objectCount objects assigned to objectProperty, an inconsistency occurs.
Example
sio:hasComponentPart rdf:type owl:ObjectProperty ;
rdfs:label "has component part" .
sio:PolygonEdge rdf:type owl:Class ;
rdfs:subClassOf sio:LineSegment ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:isPartOf ;
owl:someValuesFrom sio:Polygon ] ;
rdfs:subClassOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasComponentPart ;
owl:qualifiedCardinality "2"^^xsd:nonNegativeInteger ;
owl:onClass sio:PolygonVertex ] ;
dct:description "A polygon edge is a line segment joining two polygon vertices." ;
rdfs:label "polygon edge" .
sets-kb:TripleVertexedPolyEdge rdf:type sio:PolygonEdge ;
rdfs:label "triple vertexed polygon edge" ;
sio:hasComponentPart sets-kb:VertexOne , sets-kb:VertexTwo , sets-kb:VertexThree .
sets-kb:VertexOne rdf:type sio:PolygonVertex ;
rdfs:label "vertex one" .
sets-kb:VertexTwo rdf:type sio:PolygonVertex ;
rdfs:label "vertex two" .
sets-kb:VertexThree rdf:type sio:PolygonVertex ;
rdfs:label "vertex three" .
Data Exact Qualified Cardinality
Axiom
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:onDataRange ?datatype ;
owl:qualifiedCardinality ?cardinalityValue .
{
SELECT DISTINCT (COUNT(DISTINCT ?value) AS ?valueCount) ?individual WHERE
{
?individual ?datatypeProperty ?value .
?datatypeProperty rdf:type owl:DatatypeProperty .
?restriction rdf:type owl:Restriction ;
owl:onProperty ?datatypeProperty ;
owl:onDataRange ?datatype ;
owl:qualifiedCardinality ?cardinalityValue .
} GROUP BY ?individual
}
BIND(?resource AS ?individual)
FILTER(DATATYPE(?value) = ?datatype)
FILTER(?valueCount > ?cardinalityValue)
}
Explanation Since datatypeProperty is constrained with a qualified cardinality restriction on datatype datatype to have cardinalityValue values, and resource has valueCount values of type datatype for property datatypeProperty, an inconsistency occurs.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sets:uniqueUsername rdf:type owl:DatatypeProperty ;
rdfs:subPropertyOf sio:hasValue ;
rdfs:label "unique username" .
sets-kb:UsernameRestriction rdf:type owl:Restriction ;
owl:onProperty sets:uniqueUsername ;
owl:qualifiedCardinality "1"^^xsd:integer ;
owl:onDataRange xsd:string .
sets-kb:Steve rdf:type sio:Human ;
rdfs:label "Steve" ;
sets:uniqueUsername "SteveTheGamer"^^xsd:string , "ScubaSteve508"^^xsd:string .
Disjunction
Object Union Of
Axiom
Query
CONSTRUCT {
?member rdfs:subClassOf ?resource .
}
WHERE {
?resource rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf ?list ] .
?list rdf:rest*/rdf:first ?member .
}
Explanation
Since the class resource has a subclass or equivalent class relation with a class that comprises the union of list, which contains member member, we can infer that member is a subclass of resource.
Example
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sio:GeometricEntity rdf:type owl:Class ;
rdfs:label "geometric entity" ;
rdfs:subClassOf sio:InformationContentEntity ;
dct:description "A geometric entity is an information content entity that pertains to the structure and topology of a space." .
sio:Curve rdf:type owl:Class ;
rdfs:label "curve" ;
rdfs:subClassOf sio:GeometricEntity ;
dct:description "A curve is a geometric entity that may be located in n-dimensional spatial region whose extension may be n-dimensional, is composed of at least two fully connected points and does not intersect itself." .
sio:Line rdf:type owl:Class ;
rdfs:subClassOf sio:Curve ;
rdfs:label "line" ;
owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf ( sio:LineSegment sio:Ray sio:InfiniteLine ) ] ;
dct:description "A line is curve that extends in a single dimension (e.g. straight line; exhibits no curvature), and is composed of at least two fully connected points." .
A reasoner should infer sio:LineSegment rdfs:subClassOf sio:Line . sio:Ray rdfs:subClassOf sio:Line . sio:InfiniteLine rdfs:subClassOf sio:Line .
Data Union Of
Axiom
Query
CONSTRUCT {
?resource rdf:type ?class .
}
WHERE {
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf ?list ] .
?list rdf:rest*/rdf:first ?member .
?member rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:someValuesFrom ?datatype .
?dataProperty rdf:type owl:DatatypeProperty .
?resource ?dataProperty ?data .
FILTER(DATATYPE(?data)=?datatype)
}
Explanation
Since class has a subclass or equivalent class relationship to the union of list which has members member, and member is a restriction on dataProperty to have some values from datatype, we can infer resource rdf:type class, since resource dataProperty data and the datatype of data is datatype.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sio:MathematicalEntity rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
rdfs:label "mathematical entity" ;
dct:description "A mathematical entity is an information content entity that are components of a mathematical system or can be defined in mathematical terms." .
sio:Number rdf:type owl:Class ;
rdfs:label "number" ;
rdfs:subClassOf sio:MathematicalEntity ;
dct:description "A number is a mathematical object used to count, label, and measure." .
sio:MeasurementValue rdf:type owl:Class ;
rdfs:label "measurement value" ;
rdfs:subClassOf sio:Number ;
rdfs:subClassOf
[ rdf:type owl:Class ;
owl:unionOf (
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:dateTime ]
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:double ]
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:float ]
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:integer ]
) ] ;
dct:description "A measurement value is a quantitative description that reflects the magnitude of some attribute." .
sets-kb:DateTimeMeasurement rdf:type owl:Individual ;
rdfs:label "date time measurement" ;
sio:hasValue "1990-10-14T21:32:52"^^xsd:dateTime .
sets-kb:IntegerMeasurement rdf:type owl:Individual ;
rdfs:label "integer measurement" ;
sio:hasValue "12"^^xsd:integer .
sets-kb:DoubleMeasurement rdf:type owl:Individual ;
rdfs:label "double measurement" ;
sio:hasValue "6.34"^^xsd:double .
sets-kb:FloatMeasurement rdf:type owl:Individual ;
rdfs:label "float measurement" ;
sio:hasValue "3.14"^^xsd:float .
A reasoner should infer sets-kb:DateTimeMeasurement rdf:type sio:MeasurementValue . sets-kb:IntegerMeasurement rdf:type sio:MeasurementValue . sets-kb:DoubleMeasurement rdf:type sio:MeasurementValue . sets-kb:FloatMeasurement rdf:type sio:MeasurementValue .
Disjoint Union
Axiom
Query
CONSTRUCT {
?member rdfs:subClassOf ?resource ;
owl:disjointWith ?item .
}
WHERE {
?resource rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:disjointUnionOf ?list ] .
?list rdf:rest*/rdf:first ?member .
{
SELECT DISTINCT ?item ?class WHERE
{
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:disjointUnionOf ?list ] .
?list rdf:rest*/rdf:first ?item .
}
}
FILTER(?resource = ?class)
FILTER(?member != ?item)
}
Explanation
Since the class resource has a subclass or equivalent class relation with a class that comprises the disjoint union of list, which contains member member, we can infer that member is a subclass of resource and disjoint with the other members of the list.
Example
sio:BiologicalEntity rdf:type owl:Class ;
rdfs:label "biological entity" ;
rdfs:subClassOf sio:HeterogeneousSubstance ;
dct:description "A biological entity is a heterogeneous substance that contains genomic material or is the product of a biological process." .
sio:HeterogeneousSubstance rdf:type owl:Class ;
rdfs:label "heterogeneous substance" ;
rdfs:subClassOf sio:MaterialEntity ;
rdfs:subClassOf sio:ChemicalEntity ;
dct:description "A heterogeneous substance is a chemical substance that is composed of more than one different kind of component." .
sio:MaterialEntity rdf:type owl:Class ;
rdfs:label "material entity" ;
rdfs:subClassOf sio:Object ;
dct:description "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." .
sio:ChemicalEntity rdf:type owl:Class ;
rdfs:label "chemical entity" ;
rdfs:subClassOf sio:MaterialEntity ;
dct:description "A chemical entity is a material entity that pertains to chemistry." .
sets:Lobe rdf:type owl:Class ;
rdfs:subClassOf sio:BiologicalEntity ;
rdfs:label "lobe" ;
dct:description "A lobe that is part the brain." ;
owl:equivalentClass sets:LobeDisjointUnionClass .
sets:LobeDisjointUnionClass rdf:type owl:Class ;
owl:disjointUnionOf ( sets:FrontalLobe sets:ParietalLobe sets:TemporalLobe sets:OccipitalLobe sets:LimbicLobe ) .
A reasoner should infer
sets:FrontalLobe rdfs:subClassOf sets:LobeDisjointUnionClass , sets:Lobe ;
owl:disjointWith sets:ParietalLobe , sets:TemporalLobe , sets:OccipitalLobe , sets:LimbicLobe .
sets:ParietalLobe rdfs:subClassOf sets:LobeDisjointUnionClass , sets:Lobe ;
owl:disjointWith sets:FrontalLobe , sets:TemporalLobe , sets:OccipitalLobe , sets:LimbicLobe .
sets:TemporalLobe rdfs:subClassOf sets:LobeDisjointUnionClass , sets:Lobe ;
owl:disjointWith sets:FrontalLobe , sets:ParietalLobe , sets:OccipitalLobe , sets:LimbicLobe .
sets:OccipitalLobe rdfs:subClassOf sets:LobeDisjointUnionClass , sets:Lobe ;
owl:disjointWith sets:FrontalLobe , sets:ParietalLobe , sets:TemporalLobe , sets:LimbicLobe .
sets:LimbicLobe rdfs:subClassOf sets:LobeDisjointUnionClass , sets:Lobe ;
owl:disjointWith sets:FrontalLobe , sets:ParietalLobe , sets:TemporalLobe , sets:OccipitalLobe .
Intersection
Object Intersection Of
Axiom
Query
CONSTRUCT {
?resource rdf:type ?class.
}
WHERE {
?class rdf:type owl:Class ;
owl:intersectionOf ?list .
?list rdf:rest*/rdf:first ?member .
{
?member rdf:type owl:Class .
?resource rdf:type ?member .
}
UNION
{
?member rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:someValuesFrom ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?resource ?objectProperty [rdf:type ?restrictedClass ] .
}
{
SELECT DISTINCT * WHERE
{
?concept rdf:type owl:Class ;
owl:intersectionOf ?list .
?list rdf:rest*/rdf:first ?item .
{
?item rdf:type owl:Class .
?individual rdf:type ?item .
}
UNION
{
?item rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:someValuesFrom ?restrictedClass .
?objectProperty rdf:type owl:ObjectProperty .
?individual ?objectProperty [rdf:type ?restrictedClass ] .
}
}
}
BIND(?class AS ?concept)
BIND(?resource AS ?individual)
FILTER(?member != ?item)
}
Explanation
Since class is the intersection of the the members in list, and resource is of type each of the members in the list, then we can infer resource is a class.
Example
sio:Molecule rdf:type owl:Class ;
rdfs:label "molecule" .
sio:isTargetIn rdf:type owl:ObjectProperty ;
rdfs:label "is target in" .
sio:Target rdf:type owl:Class ;
owl:intersectionOf (
sio:Molecule
[ rdf:type owl:Restriction ;
owl:onProperty sio:isTargetIn ;
owl:someValuesFrom sio:Process ] ) ;
rdfs:label "target" .
sets-kb:ProteinReceptor rdf:type sio:Molecule ;
rdfs:label "protein receptor" ;
sio:isTargetIn sets-kb:Therapy .
sets-kb:Therapy rdf:type sio:Process ;
rdfs:label "therapy" .
A reasoner should infer sets-kb:ProteinReceptor rdf:type sio:Target .
sets-kb:Brian rdf:type sets:CanTalk , sets:Dog , sets:Friendly .
sets:CanTalk rdf:type owl:Class .
sets:Dog rdf:type owl:Class .
sets:Friendly rdf:type owl:Class .
sets:FriendlyTalkingDog rdf:type owl:Class ;
owl:intersectionOf (sets:CanTalk sets:Dog sets:Friendly) .
A reasoner should infer sets-kb:Brian rdf:type sets:FriendlyTalkingDog .
Data Intersection Of
Axiom
Query
CONSTRUCT {
}
WHERE {
}
Explanation
Example
Negation
Complement Of
Axiom
Object Complement Of
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?resource rdf:type ?class ,
?complementClass .
?class rdf:type owl:Class .
?complementClass rdf:type owl:Class .
{?class owl:complementOf ?complementClass .}
UNION
{?complementClass owl:complementOf ?class .}
}
Explanation
Since class and complementClass are complementary, resource being of type both class and complementClass leads to an inconsistency.
Example
sets:VitalStatus rdfs:subClassOf sio:Attribute ;
rdfs:label "vital status" .
sets:Dead rdf:type owl:Class ;
rdfs:subClassOf sets:VitalStatus ;
rdfs:label "dead" .
sets:Alive rdf:type owl:Class ;
rdfs:subClassOf sets:VitalStatus ;
rdfs:label "alive" ;
owl:complementOf sets:Dead .
sets-kb:VitalStatusOfPat rdf:type sets:Alive , sets:Dead ;
rdfs:label "Pat's Vital Status" ;
sio:isAttributeOf sets-kb:Pat .
sets-kb:Pat rdf:type sio:Human ;
rdfs:label "Pat" .
A reasoner should infer sets-kb:VitalStatusOfPat rdf:type owl:Nothing
or that an inconsistency occurs.
Data Complement Of
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?datatype rdf:type rdfs:Datatype ;
owl:datatypeComplementOf ?complement .
?resource ?dataProperty ?value .
?dataProperty rdf:type owl:DatatypeProperty ;
rdfs:range ?datatype .
FILTER(DATATYPE(?value) = ?complement)
}
Explanation
Since datatype is the complement of complement, dataProperty has range datatype, and resource dataProperty value, but value is of type complement, an inconsistency occurs.
Example
sets:nonTextValue rdf:type owl:DatatypeProperty ;
rdfs:subClassOf sio:hasValue ;
rdfs:label "non-text value" ;
rdfs:range ex:NotAString .
sets:NotAString rdf:type rdfs:Datatype ;
owl:datatypeComplementOf xsd:string .
sets-kb:SamplePhrase rdf:type sio:TextualEntity ;
rdfs:label "sample phrase" ;
sets:nonTextValue "To be, or not to be?"^^xsd:string .
A reasoner should infer sets-kb:SamplePhrase rdf:type owl:Nothing .
or that an inconsistency occurs.
Object Property Complement Of
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:complementOf
[ rdf:type owl:Restriction ;
owl:onProperty ?objectProperty ;
owl:someValuesFrom ?restrictedClass ]
] .
?resource rdf:type ?class ;
?objectProperty [ rdf:type ?objectClass ] .
?objectProperty rdf:type owl:ObjectProperty .
{
FILTER(?objectClass = ?restrictedClass)
}
UNION
{
?objectClass rdfs:subClassOf*|owl:equivalentClass ?restrictedClass .
}
}
Explanation
Since class is a subclass of or is equivalent to a class with a complement restriction on the use of objectProperty to have values from restrictedClass, and resource is of type class, but has the link objectProperty to have values from an instance of restrictedClass, an inconsistency occurs.
Example
sio:hasUnit rdf:type owl:ObjectProperty ,
owl:FunctionalProperty;
rdfs:label "has unit" ;
owl:inverseOf sio:isUnitOf ;
rdfs:range sio:UnitOfMeasurement ;
rdfs:subPropertyOf sio:hasAttribute ;
dct:description "has unit is a relation between a quantity and the unit it is a multiple of." .
sio:DimensionlessQuantity rdf:type owl:Class ;
rdfs:label "dimensionless quantity" ;
rdfs:subClassOf sio:Quantity ,
[ rdf:type owl:Class ;
owl:complementOf [ rdf:type owl:Restriction ;
owl:onProperty sio:hasUnit ;
owl:someValuesFrom sio:UnitOfMeasurement ] ];
owl:disjointWith sio:DimensionalQuantity ;
dct:description "A dimensionless quantity is a quantity that has no associated unit." .
sio:Quantity rdf:type owl:Class ;
rdfs:label "quantity" ;
owl:equivalentClass
[ rdf:type owl:Class ;
owl:unionOf (sio:DimensionlessQuantity sio:DimensionalQuantity) ] ;
rdfs:subClassOf sio:MeasurementValue ;
dct:description "A quantity is an informational entity that gives the magnitude of a property." .
sio:MeasurementValue rdf:type owl:Class ;
rdfs:label "measurement value" ;
rdfs:subClassOf sio:Number ;
dct:description "A measurement value is a quantitative description that reflects the magnitude of some attribute." .
sio:Number rdf:type owl:Class ;
rdfs:label "number" ;
rdfs:subClassOf sio:MathematicalEntity ;
dct:description "A number is a mathematical object used to count, label, and measure." .
sio:MathematicalEntity rdf:type owl:Class ;
rdfs:subClassOf sio:InformationContentEntity ;
rdfs:label "mathematical entity" ;
dct:description "A mathematical entity is an information content entity that are components of a mathematical system or can be defined in mathematical terms." .
sio:InformationContentEntity rdf:type owl:Class ;
rdfs:subClassOf sio:Object ;
rdfs:label "information content entity" ;
dct:description "An information content entity is an object that requires some background knowledge or procedure to correctly interpret." .
sets-kb:Efficiency rdf:type sio:DimensionlessQuantity ;
sio:hasUnit [ rdf:type sets:Percentage ] ;
rdfs:label "efficiency" .
sets:Percentage rdfs:subClassOf sio:UnitOfMeasurement ;
rdfs:label "percentage" .
A reasoner should infer sets-kb:Efficiency rdf:type owl:Nothing .
Data Property Complement Of
Query
CONSTRUCT {
?resource rdf:type owl:Nothing .
}
WHERE {
?class rdf:type owl:Class ;
rdfs:subClassOf|owl:equivalentClass
[ rdf:type owl:Class ;
owl:complementOf
[ rdf:type owl:Restriction ;
owl:onProperty ?dataProperty ;
owl:someValuesFrom ?datatype ]
] .
?resource rdf:type ?class ;
?dataProperty ?value .
?dataProperty rdf:type owl:DatatypeProperty .
FILTER(DATATYPE(?value)=?datatype)
}
Explanation
Since resource is a class which is equivalent to or a subclass of a class that has a complement of restriction on dataProperty to have some values from datatype, resource dataProperty value, but value has a datatype datatype, an inconsistency occurs.
Example
sio:hasValue rdf:type owl:DatatypeProperty ,
owl:FunctionalProperty;
rdfs:label "has value" ;
dct:description "A relation between a informational entity and its actual value (numeric, date, text, etc)." .
val:NumericalValue rdf:type owl:Class ;
rdfs:label "numerical value" ;
rdfs:subClassOf sio:ConceptualEntity ;
rdfs:subClassOf
[ rdf:type owl:Class ;
owl:complementOf
[ rdf:type owl:Restriction ;
owl:onProperty sio:hasValue ;
owl:someValuesFrom xsd:string ]
] .
sets-kb:Number rdf:type val:NumericalValue ;
sio:hasValue "Fifty"^^xsd:string .
A reasoner should infer sets-kb:Number rdf:type owl:Nothing .
Code
Deductor Agent
class Deductor(GlobalChangeService):
def __init__(self, reference, antecedent, consequent, explanation, resource="?resource", prefixes=None):
if resource is not None:
self.resource = resource
self.prefixes = {}
if prefixes is not None:
self.prefixes = prefixes
self.reference = reference
self.antecedent = antecedent
self.consequent = consequent
self.explanation = explanation
def getInputClass(self):
return pv.File
def getOutputClass(self):
return whyis.InferencedOver
def get_query(self):
self.app.db.store.nsBindings = {}
return '''SELECT DISTINCT %s WHERE {\n%s \nFILTER NOT EXISTS {\n%s\n\t}\n}''' % (
self.resource, self.antecedent, self.consequent)
def get_context(self, i):
context = {}
context_vars = self.app.db.query('''SELECT DISTINCT * WHERE {\n%s \nFILTER(regex(str(%s), "^(%s)")) . }''' % (
self.antecedent, self.resource, i.identifier), initNs=self.prefixes)
for key in context_vars.vars :
context[key] = context_vars.bindings[0][key]
return context
def process(self, i, o):
for profile in self.app.config["active_profiles"] :
if self.reference in self.app.config["reasoning_profiles"][profile] :
npub = Nanopublication(store=o.graph.store)
triples = self.app.db.query(
'''CONSTRUCT {\n%s\n} WHERE {\n%s \nFILTER NOT EXISTS {\n%s\n\t}\nFILTER (regex(str(%s), "^(%s)")) .\n}''' % (
self.consequent, self.antecedent, self.consequent, self.resource, i.identifier), initNs=self.prefixes)
try :
for s, p, o in triples:
print("Deductor Adding ", s, p, o)
npub.assertion.add((s, p, o))
except :
for s, p, o, c in triples:
print("Deductor Adding ", s, p, o)
npub.assertion.add((s, p, o))
npub.provenance.add((npub.assertion.identifier, prov.value,
rdflib.Literal(flask.render_template_string(self.explanation, **self.get_context(i)))))
Backtracer Agent
class BackTracer(GlobalChangeService):
def __init__(self, reference, antecedent, consequent, explanation, resource="?resource", prefixes=None):
if resource is not None:
self.resource = resource
self.prefixes = {}
if prefixes is not None:
self.prefixes = prefixes
self.reference = reference
self.antecedent = antecedent
self.consequent = consequent
self.explanation = explanation
def getInputClass(self):
return pv.File
def getOutputClass(self):
return whyis.InferencedOver
def get_query(self):
self.app.db.store.nsBindings = {}
return '''PREFIX whyis: <http://vocab.rpi.edu/whyis/> SELECT DISTINCT %s WHERE {\n%s GRAPH ?g { %s }\nFILTER NOT EXISTS {\n ?g whyis:hypothesis "%s" \n\t}\n}''' % (
self.resource, self.antecedent, self.consequent, self.reference)
def get_context(self, i):
context = {}
context_vars = self.app.db.query('''SELECT DISTINCT * WHERE {\n%s \nFILTER(regex(str(%s), "^(%s)")) . }''' % (
self.antecedent, self.resource, i.identifier), initNs=self.prefixes)
for key in context_vars.vars :
context[key] = context_vars.bindings[0][key]
return context
def process(self, i, o):
for profile in self.app.config["active_profiles"] :
if self.reference in self.app.config["reasoning_profiles"][profile] :
npub = Nanopublication(store=o.graph.store)
triples = self.app.db.query(
'''PREFIX whyis: <http://vocab.rpi.edu/whyis/> CONSTRUCT {\n?g whyis:hypothesis "%s" . \n} WHERE {\n%s GRAPH ?g { %s } \nFILTER NOT EXISTS {\n?g whyis:hypothesis "%s" \n\t}\nFILTER (regex(str(%s), "^(%s)")) .\n}''' % (
self.reference, self.antecedent, self.consequent, self.reference, self.resource, i.identifier), initNs=self.prefixes)
try :
for s, p, o in triples:
print("BackTracer Adding ", s, p, o)
npub.assertion.add((s, p, o))
except :
for s, p, o, c in triples:
print("BackTracer Adding ", s, p, o)
npub.assertion.add((s, p, o))
Evaluation
A
-
Same Individual
-
Different Individuals
-
Class Assertion
-
Property Assertion
-
Class Equivalence
-
Property Equivalence
ā¤
-
Class Inclusion
-
Individual Inclusion
ā„
-
Class Disjointness
šā=āĀ¬C
-
Object Complement Of
š°ā=āCā āŖā D
-
Object Union Of
-
Disjoint Union
Cā ā©ā D
-
Object Intersection Of
ā°ā=āāR.C
-
Object Some Values From
-
Property Domain
āR.C
-
Object All Values From
-
Property Range
ā±
-
Functional Object Property
š©
-
Object Max Cardinality
-
Object Min Cardinality
-
Object Exact Cardinality
š¬
-
Object Max Qualified Cardinality
-
Object Min Qualified Cardinality
-
Object Exact Qualified Cardinality
šŖ
-
Object One Of Membership
-
Object One Of Inconsistency
-
Object Has Value
ā
-
Object Property Inversion
(o)
-
Object Property Chain Inclusion
(id)
-
Keys
(Ā¬)
-
Object Property Complement Of
ā±ā
-
Inverse Functional Object Property
š®
-
Object Property Transitivity
ā
-
Object Property Inclusion
ā
-
Object Property Chain Inclusion
-
Negative Object Property Assertion
-
Property Disjointness
-
Symmetry
-
Assymetry
-
Object Has Self
-
Object Property Reflexivity
-
Object Property Irreflexivity
š(š)
-
Data Complement Of
š°(š)
-
Data Union Of
ā±(š)
-
Functional Data Property
ā°(š)
-
Data Some Values From
āR.C(š)
-
Data All Values From
š©(š)
-
Data Max Cardinality
-
Data Min Cardinality
-
Data Exact Cardinality
š¬(š)
-
Data Max Qualified Cardinality
-
Data Min Qualified Cardinality
-
Data Exact Qualified Cardinality
šŖ(š)
-
Data One Of
-
Data Has Value
(Ā¬)(š)
-
Data Property Complement Of
ā(š)
-
Data One Of
-
Data Has Value
-
Data Property Inclusion
-
Negative Data Property Assertion
Support or Contact
Contact us at rashis2@rpi.edu.