- From: Jos De_Roo <jos.deroo@agfa.com>
- Date: Fri, 6 Jun 2003 12:44:40 +0200
- To: pfps@research.bell-labs.com
- Cc: www-webont-wg@w3.org
Thanks Peter for those comments; I've tried to resolve some of them in http://www.agfa.com/w3c/euler/owl-rules $Id: owl-rules.n3,v 1.151 2003/06/06 09:27:32 amdus Exp $ We also tested with those, and with the current set there is a status quo except for http://www.w3.org/2002/03owlt/equivalentProperty/Manifest005 which we now can't prove anymore (we dropped :rule7p3). Remark that owl-rules is used in conjunction with http://www.agfa.com/w3c/euler/rdfs-rules As a whole this stuff is indeed not complete. -- Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/ "Peter F. Patel-Schneider" To: Jos De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER@AGFA <pfps@research.bell cc: www-webont-wg@w3.org -labs.com> Subject: comments on Euler owl rules 2003-06-06 04:00 AM Comments on owl-rules.n3,v 1.148 (149?) I have taken the liberty of reordering the rules. I am completely mystified as to what this is supposed to do. It is missing huge parts of the OWL semantics, including the comprehension principles. It has many errors. Comments on specific rules below. <> <#rcsid> "$Id: owl-rules.n3,v 1.148 2003/05/31 10:14:45 amdus Exp $". @prefix log: <http://www.w3.org/2000/10/swap/log#>. @prefix math: <http://www.w3.org/2000/10/swap/math#>. @prefix owl: <http://www.w3.org/2002/07/owl#>. @prefix xsd: <http://www.w3.org/2001/XMLSchema#>. @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix : <owl-rules#>. @prefix neg: <negation#>. ### Web Ontology Language OWL owl:Class rdfs:subClassOf rdfs:Class. owl:Restriction rdfs:subClassOf owl:Class. owl:DataRange rdfs:subclassOf rdfs:Literal. WRONG owl:DeprecatedClass rdfs:subclassOf owl:Class. # rdfs:subclassOf is not defined # owl:DeprecatedClass is not specifed as a subclass of owl:Class. WRONG owl:Property rdfs:subClassOf rdf:Property. # owl:Property is not defined in OWL WRONG owl:OntologyProperty rdfs:subClassOf owl:Property. # owl:Property is not defined in OWL WRONG owl:AnnotationProperty rdfs:subClassOf owl:Property. # owl:Property is not defined in OWL WRONG owl:ObjectProperty rdfs:subClassOf owl:Property. # owl:Property is not defined in OWL WRONG owl:DatatypeProperty rdfs:subClassOf owl:Property. # owl:Property is not defined in OWL ?? owl:FunctionalProperty rdfs:subClassOf owl:ObjectProperty. # functional properties can be datatype properties owl:InverseFunctionalProperty rdfs:subClassOf owl:ObjectProperty. owl:SymmetricProperty rdfs:subClassOf owl:ObjectProperty. owl:TransitiveProperty rdfs:subClassOf owl:ObjectProperty. WRONG owl:DeprecatedProperty rdfs:subClassOf owl:Property. # owl:Property is not defined in OWL ?? owl:Ontology a owl:Class. # owl:Ontology is not specified as an owl:Class owl:imports rdfs:domain owl:Ontology; rdfs:range owl:Ontology; a owl:OntologyProperty. ?? owl:incompatibleWith rdfs:domain owl:Ontology; rdfs:range owl:Ontology; rdfs:subPropertyOf owl:priorVersion. # owl:backwardCompatibleWith is an owl:OntologyProperty owl:priorVersion rdfs:domain owl:Ontology; rdfs:range owl:Ontology; a owl:OntologyProperty. WRONG owl:backwardCompatibleWith rdfs:domain owl:Ontology; rdfs:range owl:Ontology; rdfs:subPropertyOf owl:priorVersion. # owl:backwardCompatibleWith is not a subproperty of owl:priorVersion # owl:backwardCompatibleWith is an owl:OntologyProperty WRONG owl:versionInfo rdfs:domain rdfs:Resource; rdfs:range rdfs:Resource; a owl:OntologyProperty. # owl:versionInfo is an annotation property rdfs:comment a owl:AnnotationProperty. rdfs:label a owl:AnnotationProperty. rdfs:seeAlso a owl:AnnotationProperty. # missing rdfs:isDefinedBy ?? owl:equivalentClass rdfs:domain rdfs:Class; rdfs:range rdfs:Class; rdfs:subPropertyOf rdfs:subClassOf; a owl:SymmetricProperty; a owl:TransitiveProperty. # owl:complementOf is not specified as an object property # domain and range of owl:equivalentClass can be determined to be owl:Class ?? owl:disjointWith rdfs:domain rdfs:Class; rdfs:range rdfs:Class; a owl:SymmetricProperty. # owl:complementOf is not specified as an object property ?? owl:complementOf rdfs:domain rdfs:Class; rdfs:range rdfs:Class; a owl:SymmetricProperty. # owl:complementOf is not specified as an object property WRONG owl:intersectionOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty. # owl:intersectionOf is not inverse functional WRONG owl:unionOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty. # owl:unionOf is not inverse functional WRONG owl:oneOf rdfs:domain rdfs:Class; rdfs:range rdf:List; a owl:InverseFunctionalProperty. # owl:oneOf is not inverse functional WRONG owl:onProperty rdfs:domain owl:Restriction; rdfs:range owl:Property. # the domain and range of owl:onProperty are unspecified WRONG owl:allValuesFrom rdfs:domain owl:Restriction; rdfs:range rdfs:Class. # the domain and range of owl:allValuesFrom are unspecified WRONG owl:someValuesFrom rdfs:domain owl:Restriction; rdfs:range rdfs:Class. # the domain and range of owl:someValuesFrom are unspecified WRONG owl:hasValue rdfs:domain owl:Restriction; rdfs:range rdfs:Resource. # the domain of owl:hasValue is unspecified WRONG owl:cardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger. # the domain and range of owl:cardinality are unspecified WRONG owl:maxCardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger. # the domain and range of owl:cardinality are unspecified WRONG owl:minCardinality rdfs:domain owl:Restriction; rdfs:range xsd:nonNegativeInteger. # the domain and range of owl:cardinality are unspecified WRONG owl:equivalentProperty rdfs:domain owl:Property; rdfs:range owl:Property; rdfs:subPropertyOf rdfs:subPropertyOf; a owl:SymmetricProperty; a owl:TransitiveProperty. # owl:Property is not defined in OWL # owl:equivalentProperty is not specified as an object property ?? owl:inverseOf rdfs:domain owl:Property; rdfs:range owl:Property; a owl:SymmetricProperty. # owl:inverseOf is not specified as an owl:ObjectProperty # owl:differentFrom rdfs:domain rdfs:Resource; rdfs:range rdfs:Resource; a owl:SymmetricProperty. # owl:differentFrom is not specified as an object property owl:distinctMembers rdfs:domain rdfs:Resource; rdfs:range rdf:List. WRONG rdf:first a owl:FunctionalProperty. # rdf:first is not a functional property rdf:rest a owl:FunctionalProperty. # rdf:rest is not a functional property ?? owl:Thing rdfs:subClassOf rdfs:Resource. # owl:thing is not specified as an owl:Class owl:Nothing a owl:Class; owl:oneOf rdf:nil. ### inference rules for Web Ontology Language OWL {: rdfs:fyi :rule4p1. ?P owl:equivalentProperty ?R. ?S ?P ?O} => {?S ?R ?O}. {: rdfs:fyi :rule4p2. ?P owl:equivalentProperty ?R. ?S ?R ?O} => {?S ?P ?O}. {: rdfs:fyi :rule5e1. ?X owl:sameAs ?Z. ?X ?P ?Y} => {?Z ?P ?Y}. {: rdfs:fyi :rule5e2. ?P owl:sameAs ?Q. ?X ?P ?Y} => {?X ?Q ?Y}. {: rdfs:fyi :rule5e3. ?Y owl:sameAs ?Z. ?X ?P ?Y} => {?X ?P ?Z}. ?? {: rdfs:fyi :rule1i1. ?P owl:inverseOf ?Q. ?S ?P ?O} => {?O ?Q ?S}. # missing ?P rdf:type owl:ObjectProperty condition ?? {: rdfs:fyi :rule1s1. ?P a owl:SymmetricProperty. ?S ?P ?O} => {?O ?P ?S}. # missing ?P rdf:type owl:ObjectProperty condition ?? {: rdfs:fyi :rule2t1. ?P a owl:TransitiveProperty. ?X ?P ?O. ?S ?P ?X} => {?S ?P ?O}. # missing ?P rdf:type owl:ObjectProperty condition ?? {: rdfs:fyi :rule6e2. ?P a owl:FunctionalProperty. ?S ?P ?X. ?S ?P ?Y} => {?X owl:sameAs ?Y}. # missing ?P rdf:type owl:ObjectProperty or owl:DatatypeProperty condition ?? {: rdfs:fyi :rule6e3. ?P a owl:InverseFunctionalProperty. ?X ?P ?O. ?Y ?P ?O} => {?X owl:sameAs ?Y}. # missing ?P rdf:type owl:ObjectProperty condition {: rdfs:fyi :rule3r1. ?R owl:onProperty ?P; owl:hasValue ?Y. ?X a ?R} => {?X ?P ?Y}. WRONG {: rdfs:fyi :rule6e4. ?R owl:onProperty ?P. ?R owl:maxCardinality "1". ?S a ?R. ?S ?P ?X. ?S ?P ?Y} => {?X owl:sameAs ?Y}. # needs to be the integer 1, not the literal "1" ?? {: rdfs:fyi :rule7c1. ?A rdfs:subClassOf ?B. ?B rdfs:subClassOf ?A} => {?A owl:equivalentClass ?B}. # missing ?A rdf:type owl:Class condition ?? {: rdfs:fyi :rule7c2. ?A owl:complementOf ?C. ?B owl:complementOf ?C} => {?A owl:equivalentClass ?B}. # missing ?A rdf:type owl:Class condition {: rdfs:fyi :rule7c3. ?B owl:onProperty ?P; owl:cardinality ?M. ?A owl:onProperty ?P; owl:cardinality ?M} => {?A owl:equivalentClass ?B}. ?? {: rdfs:fyi :rule7c4. ?B owl:intersectionOf ?L. ?L rdf:first ?A; rdf:rest rdf:nil} => {?A owl:equivalentClass ?B}. # missing ?L rdf:type owl:Class condition ?? {: rdfs:fyi :rule7p1. ?A rdfs:subPropertyOf ?B. ?B rdfs:subPropertyOf ?A} => {?A owl:equivalentProperty ?B}. # missing ?L rdf:type owl:ObjectProperty or owl:DatatypeProperty condition ?? {: rdfs:fyi :rule7p2. ?A owl:inverseOf ?C. ?B owl:inverseOf ?C} => {?A owl:equivalentProperty ?B}. # missing ?L rdf:type owl:ObjectProperty condition WRONG {: rdfs:fyi :rule7p3. ?R owl:onProperty ?A; owl:hasValue ?V. ?T owl:onProperty ?B; owl:hasValue ?V. ?A rdfs:domain ?D; a owl:FunctionalProperty. ?B rdfs:domain ?D; a owl:FunctionalProperty. ?D rdfs:subClassOf ?R, ?T} => {?A owl:equivalentProperty ?B}. # this does not follow - ?A could be empty and ?B not {: rdfs:fyi :rule7d1. ?L rdf:first ?X; rdf:rest ?M. ?M :item ?Y. ?A owl:distinctMembers ?L; a owl:AllDifferent} => {?X owl:differentFrom ?Y}. WRONG {: rdfs:fyi :rule7j1. ?L rdf:first ?X; rdf:rest ?M. ?M :item ?Y. ?A owl:distinctMembers ?L; a owl:AllDisjoint} => {?X owl:disjointWith ?Y}. # owl:AllDisjoint not defined {: rdfs:fyi :rule8s1. ?B owl:intersectionOf ?Y. ?A owl:intersectionOf ?X. ?X :includes ?Y} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule8s2. ?B owl:unionOf ?Y. ?A owl:unionOf ?X. ?Y :includes ?X} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule8s3. ?B owl:oneOf ?Y. ?A owl:oneOf ?X. ?Y :includes ?X} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule8s4. ?A owl:intersectionOf ?X. ?X :item ?B} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule8s5. ?B owl:unionOf ?Y. ?Y :item ?A} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule8s6. ?X rdf:first ?A. ?C owl:intersectionOf ?X. ?R rdfs:subClassOf ?C} => {?R rdfs:subClassOf ?A}. {: rdfs:fyi :rule8s7. ?A owl:onProperty rdf:type; owl:hasValue ?B} => {?A rdfs:subClassOf ?B}. {: rdfs:fyi :rule9o1. ?C owl:oneOf ?X. ?X :item ?Y} => {?Y a ?C}. {: rdfs:fyi :rule9i2. ?C owl:intersectionOf ?X. ?Y :inAllOf ?X} => {?Y a ?C}. {: rdfs:fyi :rule9u1. ?C owl:unionOf ?X. ?Y :inSomeOf ?X} => {?Y a ?C}. {: rdfs:fyi :rule9r1. ?R owl:onProperty ?P; owl:allValuesFrom ?C. ?S a ?R. ?S ?P ?X} => {?X a ?C}. {: rdfs:fyi :rule9r2. ?R owl:onProperty ?P; owl:hasValue ?Y. ?X ?P ?Y} => {?X a ?R}. WRONG {: rdfs:fyi :rule9r3. ?R owl:onProperty ?P; owl:allValuesFrom ?C} => {?P a owl:ObjectProperty; rdfs:range ?C}. # the range of ?P does not need to be ?C # ?P might be an owl:DatatypeProperty {: rdfs:fyi :rule9f1. ?P owl:inverseOf ?Q. ?Q a owl:FunctionalProperty} => {?P a owl:InverseFunctionalProperty}. {: rdfs:fyi :rule9f2. ?C owl:oneOf ?L. ?L rdf:first ?X; rdf:rest rdf:nil. ?P rdfs:range ?C} => {?P a owl:FunctionalProperty}. {: rdfs:fyi :rule9i1. ?P owl:inverseOf ?Q. ?Q a owl:InverseFunctionalProperty} => {?P a owl:FunctionalProperty}. {: rdfs:fyi :rule9i2. ?C owl:oneOf ?L. ?L rdf:first ?X; rdf:rest rdf:nil. ?P rdfs:domain ?C} => {?P a owl:InverseFunctionalProperty}. {: rdfs:fyi :rule9d1. ?P rdfs:domain ?C. ?P owl:inverseOf ?Q} => {?Q rdfs:range ?C}. {: rdfs:fyi :rule9d2. ?P rdfs:range ?C. ?P owl:inverseOf ?Q} => {?Q rdfs:domain ?C}. WRONG {: rdfs:fyi :rule10c1. ?R owl:onProperty ?P; owl:minCardinality ?M; owl:maxCardinality ?M} => {?R owl:cardinality ?M}. # there no sufficient conditions for owl:cardinalty WRONG {: rdfs:fyi :rule10c3. ?R owl:onProperty ?P; owl:cardinality ?M} => {?R owl:minCardinality ?M}. # there no sufficient conditions for owl:minCardinalty WRONG {: rdfs:fyi :rule10c4. ?R owl:onProperty ?P; owl:cardinality ?M} => {?R owl:maxCardinality ?M}. # there no sufficient conditions for owl:maxCardinalty {: rdfs:fyi :rule10a1. ?L rdf:rest ?M. ?A owl:distinctMembers ?L} => {?A owl:distinctMembers ?M}. ### inconsistency detections @@ ?? {: rdfs:fyi :rule20n0. ?X a owl:Nothing} => {?X log:inconsistentWith owl:Nothing}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20n1. rdf:nil rdf:first ?X} => {?X log:inconsistentWith rdf:nil}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20n2. rdf:nil rdf:rest ?X} => {?X log:inconsistentWith rdf:nil}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20c1. ?Y owl:complementOf ?Z. ?X a ?Y, ?Z} => {?X log:inconsistentWith owl:complementOf}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20c2. ?Y owl:complementOf ?X; owl:equivalentClass ?X} => {?X log:inconsistentWith owl:complementOf}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20d0. ?Y owl:disjointWith ?X; owl:equivalentClass ?X} => {?X log:inconsistentWith owl:disjointWith}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20d1. ?Y owl:disjointWith ?Z. ?X a ?Y, ?Z} => {?X log:inconsistentWith owl:disjointWith}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20u1. ?P a owl:FunctionalProperty. ?S ?P ?X, ?Y. ?X owl:differentFrom ?Y} => {?X log:inconsistentWith owl:FunctionalProperty}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20a1. ?P a owl:InverseFunctionalProperty. ?X ?P ?O. ?Y ?P ?O. ?X owl:differentFrom ?Y} => {?X log:inconsistentWith owl:InverseFunctionalProperty}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20o0. ?C owl:oneOf ?L. ?P rdfs:domain ?C. ?X ?P ?O. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20o1. ?C owl:oneOf ?L. ?P rdfs:range ?C. ?S ?P ?X. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20o2. ?C owl:oneOf ?L. ?X a ?C. ?L neg:item ?X} => {?X log:inconsistentWith owl:oneOf}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20r0. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 0. ?X a ?R; ?P ?Y} => {?X log:inconsistentWith owl:maxCardinality}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20r1. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 1. ?X a ?R; ?P ?Y1, ?Y2. ?Y2 owl:differentFrom ?Y1} => {?X log:inconsistentWith owl:maxCardinality}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20r2. ?R owl:onProperty ?P; owl:maxCardinality ?M. ?M math:equalTo 2. ?X a ?R; ?P ?Y1, ?Y2, ?Y3. ?Y2 owl:differentFrom ?Y1. ?Y3 owl:differentFrom ?Y1, ?Y2} => {?X log:inconsistentWith owl:maxCardinality}. # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20q0. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 0. ?X a ?R; ?P ?Y. ?Y a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}. # owl:hasClassQ is not defined in OWL # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20q1. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 1. ?X a ?R; ?P ?Y1, ?Y2. ?Y2 owl:differentFrom ?Y1. ?Y1 a ?A. ?Y2 a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}. # owl:hasClassQ is not defined in OWL # log:inconsistentWith is not defined in OWL ?? {: rdfs:fyi :rule20q2. ?R owl:onProperty ?P; owl:maxCardinalityQ ?M; owl:hasClassQ ?A. ?M math:equalTo 2. ?X a ?R; ?P ?Y1, ?Y2, ?Y3. ?Y2 owl:differentFrom ?Y1. ?Y3 owl:differentFrom ?Y1, ?Y2. ?Y1 a ?A. ?Y2 a ?A. ?Y3 a ?A} => {?X log:inconsistentWith owl:maxCardinalityQ}. # owl:hasClassQ is not defined in OWL # log:inconsistentWith is not defined in OWL ### support @@ {: rdfs:fyi :rule40i1. ?S rdf:first ?X} => {?S :item ?X}. {: rdfs:fyi :rule40i2. ?S rdf:rest ?B. ?B :item ?X} => {?S :item ?X}. {: rdfs:fyi :rule40n1} => {rdf:nil neg:item ?X}. {: rdfs:fyi :rule40n2. ?S rdf:first ?A. ?A owl:differentFrom ?X. ?S rdf:rest ?B. ?B neg:item ?X} => {?S neg:item ?X}. {: rdfs:fyi :rule41i1} => {?X :includes rdf:nil}. {: rdfs:fyi :rule41i2. ?S rdf:first ?A. ?X :item ?A. ?S rdf:rest ?B. ?X :includes ?B} => {?X :includes ?S}. {: rdfs:fyi :rule41o1. ?X rdf:first ?A. ?S :item ?A. ?X rdf:rest ?B. ?B :zeroItemsIn ?S} => {?X :oneItemIn ?S}. {: rdfs:fyi :rule41o2. ?X rdf:first ?A. ?S neg:item ?A. ?X rdf:rest ?B. ?B :oneItemIn ?S} => {?X :oneItemIn ?S}. {: rdfs:fyi :rule41z1} => {rdf:nil :zeroItemsIn ?S}. {: rdfs:fyi :rule41z2. ?X rdf:first ?A. ?S neg:item ?A. ?X rdf:rest ?B. ?B :zeroItemsIn ?S} => {?X :zeroItemsIn ?S}. {: rdfs:fyi :rule42a1} => {?X :inAllOf rdf:nil}. {: rdfs:fyi :rule42a2. ?S rdf:first ?A. ?X a ?A. ?S rdf:rest ?B. ?X :inAllOf ?B} => {?X :inAllOf ?S}. {: rdfs:fyi :rule42s1. ?S rdf:first ?A. ?X a ?A} => {?X :inSomeOf ?S}. {: rdfs:fyi :rule42s2. ?S rdf:rest ?B. ?X :inSomeOf ?B} => {?X :inSomeOf ?S}. {: rdfs:fyi :rule60n1. ?A owl:complementOf ?B. ?C a ?A} => {?C neg:type ?B}. {: rdfs:fyi :rule60n2. ?A owl:oneOf ?L. ?L neg:item ?C} => {?C neg:type ?A}. {: rdfs:fyi :rule60n3. ?A owl:complementOf ?B. ?C neg:type ?A} => {?C a ?B}. ?? rdfs:Class rdf:type _:i . ?? _:i owl:intersectionOf _:l . ?? _:l rdf:first rdfs:Class . ?? _:l rdf:rest rdf:nil . # this doesn't belong in the OWL rules
Received on Friday, 6 June 2003 06:44:48 UTC