Re: Review test cases

Oliver,
I comment inline on issues regarding the ent. test cases. Some isues
such as uniform default prefix had already been taken care of. The
other issues I believe I have fixed now. Thanks Olivier!
Birte

On 28 March 2011 16:02, Olivier Corby <Olivier.Corby@sophia.inria.fr> wrote:
> Here is my review of test cases (Action-421)
>
[snip]
> entailment-owlds
> entailment-RDF
> entailment-RDFS

I believe they have been deleted, at least I don't have them.

> entailment
>
> I suggest to remove the @base statement from manifest.ttl (there is no base
> in other manifests)

done

> :rdfs03 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test RDFS rules incompleteness" ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs03.rq> ;
>            qt:data   <rdfs03.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs03.srx>
>
> query: SELECT ?x WHERE { ex:a ex:b1 ?x }
>
> data:
> ex:a ex:b1 ex:c1 .
> ex:b1 rdfs:subPropertyOf _:b2 .
> _:b2 rdfs:domain ex:c2 .
>
> result:
> x = http://example.org/ns#c1
> x = http://example.org/ns#c2
>
> rdfs:domain specifies the type of the subject, not the value,
> Result should be:
> x = http://example.org/ns#c1
>
> Furthermore, in RDF, properties cannot be blanks.

Actually, the test was meant to illustrate that the (informal) RDFS
inference rules from the RDF spec are incomplete (as shown by ter
Horst). However, my query and answer were messed up. The BGP of the
query is now
?x rdf:type ex:c2
and the result should be
x = http://example.org/ns#a

The instantiated BGP ex:a a ex:c2 is RDFS-entailed, but in order to
get that, one has to work with generalised RDF graphs when
materialising consequences:
"ex:a ex:b1 ex:c1" plus "ex:b1 rdfs:subPropertyOf _:b2"
gives
"ex:a _:b2 ex:c1" plus "_:b2 rdfs:domain ex:c2"
gives
"ex:a a ex:c2", which is an RDFS-entailed legal triple. "ex:a _:b2
ex:c1" is not legal RDF, but in order to derive all RDFS-consequences
you need such "internal" non-RDF triples. Otherwise the system is
incomplete, although this might not matter much in practise.

> _________________________
>
> :rdfs04 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test subClassOf" ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs04.rq> ;
>            qt:data   <rdfs04.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs04.srx> .
>
> query:
> SELECT ?x WHERE { ex:a ex:b ?x }
>
> data:
> ex:a ex:b ex:c1 .
> ex:c1 rdfs:subClassOf ex:c2 .
>
> result:
> x = http://example.org/ns#c1
> x = http://example.org/ns#c2
>
> Result should be:
>
> x = http://example.org/ns#c1
>
> Subsumption occurs with rdf:type

Again right. I always tried to avoid BGPs such as ex:a rdf:type ?x
since that would also give answers from axiomatic triples, e.g., ex:a
rdf:type rdf:Resource or other such triples and without having a
system that does this kind of entailment it is hard to make sure you
don't miss such triples. Anyway, I didn't successfully manage to avoid
the ssue either ;-)
Here my proposed fix that still tests class subsumption:
SELECT ?x WHERE { ?x rdf:type ex:c2 }
data:
ex:a rdf:type ex:c1 .
ex:c1 rdfs:subClassOf ex:c2 .
result:
x = http://example.org/ns#a

> __________________________
>
> :rdfs06 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test domain" ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs06.rq> ;
>            qt:data   <rdfs06.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs06.srx> .
>
> query:
> SELECT ?x WHERE { ?x ex:b ex:c }
>
> data:
> ex:a1 ex:b ex:c .
> ex:b rdfs:domain ex:a2 .
>
> result:
> x = http://example.org/ns#a1
> x = http://example.org/ns#a2
>
> rdfs:domain specifies the *type* of the subject, not the subject itself,
> Result should be:
>
> x = http://example.org/ns#a1

True. To still test rdfs:domain inference, I changed the test to
query: SELECT ?x WHERE { ?x rdf:type ex:aType }
data:
ex:a ex:b ex:c .
ex:b rdfs:domain ex:aType .
result:
x = http://example.org/ns#a

> _________________________________________
>
> :rdfs07 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test range" ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs07.rq> ;
>            qt:data   <rdfs07.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs07.srx> .
> query:
> SELECT ?x WHERE { ex:a ex:b ?x }
> data:
> ex:a ex:b ex:c1 .
> ex:b rdfs:range ex:c2 .
> result:
> x = http://example.org/ns#c1
> x = http://example.org/ns#c2
>
> rdfs:range specifies the *type* of the value, not the value itself,
> Result should be:
> x = http://example.org/ns#c1

As above. Changed to
query: SELECT ?x WHERE { ?x rdf:type ex:cType }
data:
ex:a ex:b ex:c .
ex:b rdfs:range ex:cType .
result:
x = http://example.org/ns#c

> _________________________________________________
>
> :rdfs08 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test rdf:XMLLiteral subclass of rdfs:Literal"
> ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs08.rq> ;
>            qt:data   <rdfs08.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs08.srx> .
>
> query: SELECT ?x WHERE { ex:d rdfs:range ?x }
> data:
> ex:d rdfs:range rdf:XMLLiteral .
> result:
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral
> x = http://www.w3.org/2000/01/rdf-schema#Literal
>
> As we have also:
> rdfs:Literal rdfs:subClassOf rdfs:Resource
> result should be:
>
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral
> x = http://www.w3.org/2000/01/rdf-schema#Literal
> x = http://www.w3.org/2000/01/rdf-schema#Resource
>
True. That's easy to overlook without a system that does RDFS
entailment. Added now.
> _________________________________________________
>
> :rdfs11 rdf:type mf:QueryEvaluationTest ;
>     mf:name    "RDFS inference test subclasses of rdf:Container" ;
>     dawgt:approval dawgt:NotClassified ;
>     mf:action
>          [ qt:query  <rdfs11.rq> ;
>            qt:data   <rdfs11.ttl> ;
>            sd:entailmentRegime ent:RDFS ] ;
>     mf:result  <rdfs11.srx> .
> query: SELECT ?x WHERE { ?x rdfs:subClassOf rdfs:Container }
> data: ex:a ex:b ex:c .
> result:
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Alt
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq
>
> rdfs:subClassOf is Reflexive,
> result should be:
>
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Alt
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag
> x = http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq
> x = http://www.w3.org/2000/01/rdf-schema#Container

Fixed.

> entailment:
>
> owl:DataProperty should be replaced by owl:DatatypeProperty
>
> bind01.rq:  ?p a owl:DataProperty .
> bind02.rq:  ?p a owl:DataProperty .
> bind03.rq:  ?p a owl:DataProperty .
> bind03.rq:  ?p1 a owl:DataProperty .
> bind04.rq:  ?p a owl:DataProperty .
> bind05.rq:  ?p a owl:DataProperty .
> bind06.rq:  ?p a owl:DataProperty .
> bind07.rq:  ?p a owl:DataProperty .
> bind08.rq:  ?p a owl:DataProperty .

Done.

> entailment: typos with prefix:
>
> rdfs01
> ex:b1 rdfs:rdfs:subPropertyOf ex:b2 .
>
> rdfs02
> ex:b1 rdfs:rdfs:subPropertyOf ex:b2 .

Fixed.

> rdfs08
> rdf prefix is missing
>
> rdfs09
> rdf prefix is missing
>
> rdfs12
> . missing
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>
> rdf02
> . missing
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>
> rdf03
> . missing
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>
All fixed.

[snip README issues]



-- 
Dr. Birte Glimm, Room 309
Computing Laboratory
Parks Road
Oxford
OX1 3QD
United Kingdom
+44 (0)1865 283520

Received on Tuesday, 5 April 2011 13:52:55 UTC