@prefix rvo: . @prefix rdfs: . @prefix owl: . @prefix rdf: . @prefix dc: . @prefix xsd: . # Ontology metadata a owl:Ontology ; dc:contributor "Bojan Božić" , "Gavin Mendel-Gleason" , "Rob Brennan" , "Kevin C. Feeney" ; dc:creator "Bojan Božić" ; dc:date "2015-11-11" ; dc:description "The purpose of RVO is to enable a reasoner to describe reasoning errors detected in an input ontology, in order to facilitate the integration of reasoners into semantic web toolchains. It is defined as a simple OWL 2 ontology that is amenable to RDFS-based interpretations or use as a linked data vocabulary without any dependence on reasoning. In future, an RDF version of the ontology is planned, in order to support interpretation by RDF clients. A permanent identifier for the ontology has been registered with the W3C permanent identifier community group. The full source of the ontology is published online. This ontology is used to describe RDF and OWL reasoning violation messages in the Dacura Quality Service. These are generated by running an RDF/RDFS/OWL-DL reasoner over an RDF-based ontology model and allowing the Dacura quality service to report any integrity violations detected at schema or instance level. These violations report areas where the input model is logically inconsistent or breaks RDFS/OWL semantics or axioms. Violations may be reported as based on open world or closed world assumptions. The open world is the default OWL semantics and can typically only detect a limited number of problems due to incomplete knowledge. The closed world interpretation assumes that you have provided all relevant aspects of the model and is able to detect a much wider range of violations, e.g. missing or misspelled term definitions. This is often useful during ontology development or in a system that interprets OWL as a constraint language.

A common task performed with semantic web reasoners is the detection and reporting of errors or inconsistencies found in an ontology. This task frequently occurs within the ontology authoring, interlinking, classification, quality analysis and evolution phases of the linked data lifecycle. However many tools are typically integrated as a tool-chain to manage the entire lifecycle or even the fullrange of activities within a single lifecycle stage. A specific issue for reasoner integration is that there is no common definition of the range of reasoning errors which could occur while working on an OWL or RDF(S) ontology. Having such a specification would allow machine-readability and interpretation of detailed error messages. Furthermore, this would allow tools to verify OWL DL compliance of an ontology, find out which best practice requirements the ontology meets or violates, track the impact of interpreting the ontology in open and closed world contexts, identify the exact position of violations, and support intelligent visualisation. The research question that this paper addresses is: to what extent can a dedicated reasoning error ontology describe reasoning errors and simplify integration of reasoners into data lifecycle tool-chains?

Base Classes

Violation Classes

Class violations are used for reporting issues regarding the TBox and instance violations ABox in general. Therefore, class violations are reported when e.g. property domains are missing, subsumption errors are detected, or class and property cycles are found. Instance violations show instances which are not elements of valid classes, cardinalities which are incorrect, property constraints that are violated, literals and objects which are confused, etc.

Example

This example shows a ClassViolation which is a SchemaViolation and more specifically a ClassCycleViolation. Such specific violation detection results make it possible to provide exact suggestions to ontology developers or repair agents and trigger ontology improvements.

Ontology Snippet Producing the Violation

seshat:Territory seshat:hasValue xsd:DateTime .

Resulting RDF Graph after Validation

" ; dc:rights "This ontology is distributed under a Creative Commons Attribution License - http://creativecommons.org/licenses/by/3.0" ; dc:title "Reasoning Violations Ontology" ; rdfs:comment "The Reasoning Violations Ontology (RVO) is a new OWL Dl, which describes both ABox and TBox reasoning errors for the integration of reasoners into data lifecycle tool-chains. The ontology covers violations of the OWL 2 direct semantics and syntax detected on both the schema and instance level over the full range of OWL 2 and RDFS language constructs. It supports error localisation and repair by defining properties that both identify the statement where a violation is detected, and by providing context information on the violation which may help semantic data publishers to fix them. We have developed RVO to provide a structured way to exchange knowledge of reasoning errors between reasoners and their clients, such as for client-side representation of reasoning and constraint checking results." ; rdfs:label "Reasoning Violations Ontology" ; owl:versionInfo "0.1.02" . # Reasoning Violations Ontology # Properties rvo:message a owl:DatatypeProperty ; rdfs:label "Message" ; rdfs:comment "This is a general property which can be used to attach the original error message provided by a reasoner." ; rdfs:domain rvo:Violation ; rdfs:range xsd:string . rvo:info a owl:DatatypeProperty ; rdfs:label "Info" ; rdfs:comment "This is a generic property which allows publishing additional context to a message." ; rdfs:domain rvo:Violation ; rdfs:range xsd:string . rvo:bestPractice a owl:DatatypeProperty ; rdfs:label "Best Practice" ; rdfs:comment "This is a generic property which indicates whether a violation is considered only best practice or more serious." ; rdfs:domain rvo:Violation ; rdfs:range xsd:boolean . rvo:definedAtLine a owl:DatatypeProperty ; rdfs:label "Defined at Line" ; rdfs:comment "This is a generic property which indicates where the class, property, or element that caused the violation has occured in the ontology." ; rdfs:domain rvo:Class , rvo:Element , rvo:Property ; rdfs:range xsd:nonNegativeInteger . rvo:cardinality a owl:DatatypeProperty ; rdfs:label "Cardinality" ; rdfs:comment "Defines the cardinality of a not an element violation." ; rdfs:domain rvo:NotAnElementViolation ; rdfs:range xsd:nonNegativeInteger . rvo:path a owl:DatatypeProperty ; rdfs:label "Path" ; rdfs:comment "Defines the path of the cycle violation." ; rdfs:domain rvo:PropertyCycleViolation , rvo:ClassCycleViolation ; rdfs:range xsd:string . rvo:class a owl:ObjectProperty ; rdfs:label "Class" ; rdfs:comment "A property which assignes the class that produced a violation to the respective violation class." ; rdfs:domain rvo:Violation ; rdfs:range rvo:Class . rvo:property a owl:ObjectProperty ; rdfs:label "Property" ; rdfs:comment "A property which assignes the property that produced a violation to the respective violation class." ; rdfs:domain rvo:Violation ; rdfs:range rvo:Property . rvo:element a owl:ObjectProperty ; rdfs:label "Element" ; rdfs:comment "A property which assignes the element that was involved in a violation to the respective element violation class." ; rdfs:domain rvo:Violation ; rdfs:range rvo:Element . rvo:constraintType a owl:ObjectProperty ; rdfs:label "Constraint Type" ; rdfs:comment "Type of constraint on a violation - could be openworld or closedworld." ; rdfs:domain rvo:Violation ; rdfs:range rvo:ConstraintType . rvo:parent a owl:ObjectProperty ; rdfs:label "Parent" ; rdfs:comment "Involved parent class or property." ; rdfs:domain rvo:PropertyViolation , rvo:ClassViolation ; rdfs:range rvo:Property , rvo:Class . rvo:child a owl:ObjectProperty ; rdfs:label "Child" ; rdfs:comment "Involved child class or property." ; rdfs:domain rvo:PropertyViolation , rvo:ClassViolation ; rdfs:range rvo:Property , rvo:Class . rvo:value a owl:ObjectProperty ; rdfs:label "Value" ; rdfs:comment "The value of an element involved in the not an element violation." ; rdfs:domain rvo:NotAnElementViolation ; rdfs:range rvo:Element . rvo:qualifiedOn a owl:ObjectProperty ; rdfs:label "Qualified on" ; rdfs:comment "The relation between a not an elment violation an the class the element was assigned to." ; rdfs:domain rvo:NotAnElementViolation ; rdfs:range rvo:Class . rvo:domain a owl:ObjectProperty ; rdfs:label "Domain" ; rdfs:comment "The intended domain class of a property domain violation." ; rdfs:domain rvo:PropertyDomainViolation ; rdfs:range rvo:Class . rvo:range a owl:ObjectProperty ; rdfs:label "Range" ; rdfs:comment "The intended range class of a property domain violation." ; rdfs:domain rvo:PropertyDomainViolation ; rdfs:range rvo:Class . rvo:parentDomain a owl:ObjectProperty ; rdfs:label "Parent Domain" ; rdfs:comment "Parent domain of a domain not subsumed violation." ; rdfs:domain rvo:DomainNotSubsumedViolation ; rdfs:range rvo:Class . rvo:parentRange a owl:ObjectProperty ; rdfs:label "Parent Range" ; rdfs:comment "Parent range of a range not subsumed violation." ; rdfs:domain rvo:RangeNotSubsumedViolation ; rdfs:range rvo:Class . rvo:parentProperty a owl:ObjectProperty ; rdfs:label "Parent Propery" ; rdfs:comment "Marks the parent property for range and domain not subsumed violations." ; rdfs:domain rvo:DomainNotSubsumedViolation , rvo:RangeNotSubsumedViolation ; rdfs:range rvo:Property . rvo:subject a owl:ObjectProperty ; rdfs:label "Subject" ; rdfs:comment "The subject of a triple involved in a violation." ; rdfs:domain rvo:SchemaBlankNodeViolation , rvo:EdgeOrphanInstanceViolation , rvo:InstancePropertyViolation , rvo:InstanceBlankNodeViolation ; rdfs:range owl:Thing . rvo:predicate a owl:ObjectProperty ; rdfs:label "Predicate" ; rdfs:comment "The predicate of a triple involved in a violation." ; rdfs:domain rvo:SchemaBlankNodeViolation , rvo:EdgeOrphanInstanceViolation , rvo:InstancePropertyViolation , rvo:InstanceBlankNodeViolation ; rdfs:range owl:Thing . rvo:object a owl:ObjectProperty ; rdfs:label "Object" ; rdfs:comment "The object of a triple involved in a violation." ; rdfs:domain rvo:SchemaBlankNodeViolation , rvo:EdgeOrphanInstanceViolation , rvo:InstancePropertyViolation , rvo:InstanceBlankNodeViolation ; rdfs:range owl:Thing . # Classes # General classes rvo:Class a owl:Class ; rdf:type rdfs:Class ; rdfs:label "Class" ; rdfs:comment "This is the class which produced a violation." . rvo:Property a owl:Class ; rdfs:label "Property" ; rdfs:comment "This is the property which produced a violation." . rvo:Element a owl:Class ; rdfs:label "Element" ; rdfs:comment "This is the element which was involved in a violation." . rvo:ConstraintType a owl:Class ; owl:oneOf (rvo:openworld rvo:closedworld) ; rdfs:label "Constraint Type" ; rdfs:comment "Specifies whether the constraint exists in a closed or open world." . # Violations rvo:Violation a owl:Class ; rdfs:label "Violation" ; rdfs:comment "Generic class for all kinds of violations within Dacura." ; rvo:message xsd:string . rvo:SchemaViolation a owl:Class ; rdfs:label "Schema Violation" ; rdfs:comment "A violation which is caused by inconsistancies on the schema level." ; rdfs:subClassOf rvo:Violation . rvo:InstanceViolation a owl:Class ; rdfs:label "Instance Violation" ; rdfs:comment "A violation which is caused by inconsistancies on the instance level." ; rdfs:subClassOf rvo:Violation . rvo:ClassViolation a owl:Class ; rdfs:label "Class Violation" ; rdfs:comment "A violation which is caused by an inconsistent or invalid class definition." ; rdfs:subClassOf rvo:SchemaViolation . rvo:PropertyViolation a owl:Class ; rdfs:label "Property Violation" ; rdfs:comment "A violation which is caused by an inconsistent or invalid property definition." ; rdfs:subClassOf rvo:SchemaViolation . rvo:NoImmediateClassViolation a owl:Class ; rdfs:label "No Immediate Class Violation" ; rdfs:comment "An undefined class is used as domain for a property or the class is defined but the superclass is not or the class is not a subclass of a defined class or the class is an intersection of a defined class but not a defined class or the class is not an intersection of a defined class or the class is not a union of a defined class or the class is a union but not a defined class." ; rdfs:subClassOf rvo:ClassViolation . rvo:OrphanClassViolation a owl:Class ; rdfs:label "Orphan Class Violation" ; rdfs:comment "The class is not a subclass, intersection, or union of a valid class." ; rdfs:subClassOf rvo:ClassViolation . rvo:ClassCycleViolation a owl:Class ; rdfs:label "Class Cycle Violation" ; rdfs:comment "The class has a class cycle." ; rdfs:subClassOf rvo:ClassViolation . rvo:NotDomainClassViolation a owl:Class ; rdfs:label "Not Domain Class Violation" ; rdfs:comment "The used property domain is not defined." ; rdfs:subClassOf rvo:ClassViolation . rvo:NotUniqueClassLabelViolation a owl:Class ; rdfs:label "Not Unique Class Label Violation" ; rdfs:comment "Class does not have exactly one label." ; rdfs:subClassOf rvo:ClassViolation . rvo:NotUniqueClassNameViolation a owl:Class ; rdfs:label "Not Unique Class Name Violation" ; rdfs:comment "The class or restriction is not unique (i.e. there is another existing class with the same identifier)." ; rdfs:subClassOf rvo:ClassViolation . rvo:NotSuperClassOfClassViolation a owl:Class ; rdfs:label "Not Super Class of Class Violation" ; rdfs:comment "The class is not a superclass of a defined class." ; rdfs:subClassOf rvo:NoImmediateClassViolation . rvo:NotSubClassOfClassViolation a owl:Class ; rdfs:label "Not Sub Class of Class Violation" ; rdfs:comment "The class is not a subclass of a defined class.

Example: Class A is not a subclass of a valid class B." ; rdfs:subClassOf rvo:NoImmediateClassViolation ; rdfs:subClassOf rvo:OrphanClassViolation . rvo:NotIntersectionOfClassViolation a owl:Class ; rdfs:label "Not Intersection of Class Violation" ; rdfs:comment "The class is an intersection of a defined class, but not a defined class or the class is not an intersection of a defined class.

Example: The class A is not an intersection of a valid class B." ; rdfs:subClassOf rvo:NoImmediateClassViolation ; rdfs:subClassOf rvo:OrphanClassViolation . rvo:NotUnionOfClassViolation a owl:Class ; rdfs:label "Not Union of Class Violation" ; rdfs:comment "The class is not a union of a defined class or is a union of a defined class but not defined itself." ; rdfs:subClassOf rvo:NoImmediateClassViolation ; rdfs:subClassOf rvo:OrphanClassViolation . rvo:NotUniquePropertyNameViolation a owl:Class ; rdfs:label "Not Unique Property Name Violation" ; rdfs:comment "Another property exists with the same identifier.

Example: A is not a unique property name, some property with this name already exists." ; rdfs:subClassOf rvo:PropertyViolation . rvo:SchemaBlankNodeViolation a owl:Class ; rdfs:label "Schema Blank Node Violation" ; rdfs:comment "Subject, predicate, or object is a blank node." ; rdfs:subClassOf rvo:PropertyViolation . rvo:PropertyRangeViolation a owl:Class ; rdfs:label "Property Range Violation" ; rdfs:comment "Property has no well defined range.

Example: Object property A has no specified range." ; rdfs:subClassOf rvo:PropertyViolation . rvo:NoExplicitRangeViolation a owl:Class ; rdfs:label "No Explicit Range Violation" ; rdfs:comment "Property has no explicit range." ; rdfs:subClassOf rvo:PropertyRangeViolation . rvo:InvalidRangeViolation a owl:Class ; rdfs:label "Invalid Range Violation" ; rdfs:comment "The property has an invalid or unimplemented range.

Example: ObjectProperty Range class A is not a valid range for property A." ; rdfs:subClassOf rvo:PropertyRangeViolation . rvo:RangeNotSubsumedViolation a owl:Class ; rdfs:label "Range Not Subsumed Violation" ; rdfs:comment "Invalid range on a property has been caused by failure of range subsumption.

Example: Invalid range on property A, due to failure of range subsumption." ; rdfs:subClassOf rvo:PropertyRangeViolation . rvo:PropertyAnnotationOverloadViolation a owl:Class ; rdfs:label "Property Annotation Overload Violation" ; rdfs:comment "The property is defined as a property and as an annotation property." ; rdfs:subClassOf rvo:PropertyViolation . rvo:PropertyDomainViolation a owl:Class ; rdfs:label "Property Domain Violation" ; rdfs:comment "Property has no well defined domain." ; rdfs:subClassOf rvo:PropertyViolation . rvo:NoExplicitDomainViolation a owl:Class ; rdfs:label "No Explicit Domain Violation" ; rdfs:comment "Property has no explicit domain." ; rdfs:subClassOf rvo:PropertyDomainViolation . rvo:InvalidDomainViolation a owl:Class ; rdfs:label "Invalid Domain Violation" ; rdfs:comment "The property has an invalid domain." ; rdfs:subClassOf rvo:PropertyDomainViolation . rvo:DomainNotSubsumedViolation a owl:Class ; rdfs:label "Domain Not Subsumed Violation" ; rdfs:comment "Invalid domain on a property has been caused by failure of domain subsumption." ; rdfs:subClassOf rvo:PropertyDomainViolation . rvo:OrphanPropertyViolation a owl:Class ; rdfs:label "Orphan Property Violation" ; rdfs:comment "The property is not a sub-property of a valid property." ; rdfs:subClassOf rvo:PropertyViolation . rvo:NotSubpropertyOfPropertyViolation a owl:Class ; rdfs:label "Not Subproperty of Property Violation" ; rdfs:comment "The property is not a subproperty of a valid property.

Example: Property A is not a sub-property of a valid property B." ; rdfs:subClassOf rvo:OrphanPropertyViolation . rvo:PropertyTypeOverloadViolation a owl:Class ; rdfs:label "Property Type Overload Violation" ; rdfs:comment "The property is an object property and a datatype property." ; rdfs:subClassOf rvo:PropertyViolation . rvo:PropertyCycleViolation a owl:Class ; rdfs:label "Property Cycle Violation" ; rdfs:comment "The property class has a cycle." ; rdfs:subClassOf rvo:PropertyViolation . rvo:InstancePropertyViolation a owl:Class ; rdfs:label "Instance Property Violation" ; rdfs:comment "No property class associated with property." ; rdfs:subClassOf rvo:InstanceViolation . rvo:NoPropertyDomainViolation a owl:Class ; rdfs:label "No Property Domain Violation" ; rdfs:comment "Property has no well defined domain.

Example: Object property A has no specified domain." ; rdfs:subClassOf rvo:InstanceViolation . rvo:NoPropertyRangeViolation a owl:Class ; rdfs:label "No Property Range Violation" ; rdfs:comment "Property has no well defined range." ; rdfs:subClassOf rvo:InstanceViolation . rvo:InvalidEdgeViolation a owl:Class ; rdfs:label "Invalid Edge Violation" ; rdfs:comment "Range/domain cardinality of deleted predicates not respected." ; rdfs:subClassOf rvo:InstancePropertyViolation . rvo:NotFunctionalPropertyViolation a owl:Class ; rdfs:label "Non Functional Property Violation" ; rdfs:comment "Functional property is not functional." ; rdfs:subClassOf rvo:InstancePropertyViolation . rvo:NotInverseFunctionalPropertyViolation a owl:Class ; rdfs:label "Not Inverse Functional Property Violation" ; rdfs:comment "Functional property is not functional." ; rdfs:subClassOf rvo:InstancePropertyViolation . rvo:LocalOrphanPropertyViolation a owl:Class ; rdfs:label "Local Orphan Property Violation" ; rdfs:comment "No property class associated with property." ; rdfs:subClassOf rvo:InstancePropertyViolation . rvo:NotAnElementViolation a owl:Class ; rdfs:label "Not an Element Violation" ; rdfs:comment "Not an element of enumeration, intersection, or union." ; rdfs:subClassOf rvo:InstanceViolation . rvo:ObjectInvalidAtClassViolation a owl:Class ; rdfs:label "Object Invalid at Class Violation" ; rdfs:comment "Not an lement of enumeration or more than one branch of disjoint union is valid or element is not valid at any class of union or complement is valid." ; rdfs:subClassOf rvo:NotAnElementViolation . rvo:NotRestrictionElementViolation a owl:Class ; rdfs:label "Not Restriction Element Violation" ; rdfs:comment "No values from restriction class or some values not from restriction class or cardinality too small on restriction class or cardinality too large on restriction class or cardinality unequal on restriction class or qualified cardinality too small on restriction class or qualified cardinality too large on restriction class or qualified cardinality unequal on restriction class or hasValue constraint violated." ; rdfs:subClassOf rvo:NotAnElementViolation . rvo:EdgeOrphanInstanceViolation a owl:Class ; rdfs:label "Edge Orphan Instance Violation" ; rdfs:comment "The instance has no class or an invalid domain class." ; rdfs:subClassOf rvo:NotAnElementViolation . rvo:DataInvalidAtDatatypeViolation a owl:Class ; rdfs:label "Data Invalid at Datatype Violation" ; rdfs:comment "Not an element of enumeration or not an element of intersection or not an element of union or literal cannot be an object." ; rdfs:subClassOf rvo:NotAnElementViolation . rvo:NotBaseTypeElementViolation a owl:Class ; rdfs:label "Not Base Type Element Violation" ; rdfs:comment "The value is not element of the specified datatype." ; rdfs:subClassOf rvo:DataInvalidAtDatatypeViolation . rvo:InstanceBlankNodeViolation a owl:Class ; rdfs:label "Instance Blank Node Violation" ; rdfs:comment "Subject, preidcate, or object is a blank node." ; rdfs:subClassOf rvo:InstanceViolation .