- From: Stian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk>
- Date: Tue, 3 Jul 2012 12:18:32 +0100
- To: public-prov-wg@w3.org
This email is mainly my notes as I have been checking the examples used by PROV-O to make sure they are valid RDF and valid according to the ontology. I would need volunteers to complete the job (such as fixing the examples that are broken!). Any takers? Also suggestions on other ways to check this would be appreciated. I've made a little shell script that checks all PROV-O examples (which again are embedded into HTML): http://dvcs.w3.org/hg/prov/file/fd4982cfd7f7/examples/eg-24-prov-o-html-examples/rdf/create/check-examples.bash It uses CWM to check the syntax only, assuming N3 rather than Turtle. The output is the filename if it is OK, or error message on stderr: > stain@ralph-ubuntu:~/src/prov/examples/eg-24-prov-o-html-examples/rdf/create$ ./check-examples.bash > rdf/property_qualifiedDerivation.ttl > rdf/property_inserted.ttl > > (..) > Failed to parse file:///home/stain/src/prov/examples/eg-24-prov-o-html-examples/rdf/create/rdf/class_ContextualizedEntity.ttl > file:///home/stain/src/prov/examples/eg-24-prov-o-html-examples/rdf/create/rdf/class_ContextualizedEntity.ttl > Traceback (most recent call last): > File "/usr/local/bin/cwm", line 750, in <module> > doCommand() > rdf/property_hasAnchor.ttl > rdf/property_key.ttl > (..) > stain@ralph-ubuntu:~/src/prov/examples/eg-24-prov-o-html-examples/rdf/create$ Some of these errors are due to them being in TriG format rather than Turtle format, which is not supported by CWM. The remaining syntax errors I have corrected and committed. If we use this style for the named graphs: :G1 = { :a :b :c } . Then it is valid N3 (but not Turtle), and can be included in the test. I changed this temporarily (not checked in) using: for f in $(find rdf -name '*ttl') ; do cat $f | sed 's/{$/= {/' | sed 's/^}/} ./' > /tmp/$$ && cp /tmp/$$ $f ; done .. to ensure they are valid enough - and then check with ./check-examples.bash again. BTW - I found it odd that prov:Note is asserted inside the note graph in rdf/class_Note.ttl and rdf/class_Trace.ttl, rather than in the graph outside that has prov:hasAnnotation - so I moved that out. (Also I guess we don't want to reinvent an annotation ontology - http://www.w3.org/community/openannotation/ ) Then on to checking if there are some spelling wrong, like prov:Acvititity. To include the named graph files in this, I temporarily flattened them rather than use the Turtle syntax: hg revert -C rdf for f in $(find rdf -name '*ttl') ; do cat $f | sed 's/{$/ a prov:Entity ./' | sed 's/^}//' > /tmp/$$ && cp /tmp/$$ $f ; done hg revert -C rdf I've made a little shell script that merges all the PROV-O examples to a single TTL file - ./merge-examples.bash This generates merged.ttl - see http://dvcs.w3.org/hg/prov/file/tip/examples/eg-24-prov-o-html-examples/rdf/create/merged.ttl (Note - you do not need to do the above sed-trick if you are OK to ignore the 4-5 TriG files from the merge - merge-examples will silently skip files that don't parse) I then opened merged.ttl in Protege 4.2 beta, and saved it out again in Turtle: http://dvcs.w3.org/hg/prov/file/a068151bca91/examples/eg-24-prov-o-html-examples/rdf/create/implied.owl As a side note - to distinguish between 'our' classes (like Painting) and classes in other namespaces, like prov:Activity - turn on prefix qnames by going to View -> Custom rendering -> Render by Qualified Name. As you see, Protege has filled in the blanks for 'new' classes and properties, such as: prov:inContext rdf:type owl:AnnotationProperty . prov:contextualized rdf:type owl:AnnotationProperty . prov:hadQuoter rdf:type owl:AnnotationProperty . (..) prov:Actvity rdf:type owl:Class . prov:CompleteCollection rdf:type owl:Class . Now, the boring job (which I have not done - any takers?) - is to go through this list for the properties and classes (you can ignore 'Individuals') - and for any prov: keyword, look in merged.ttl to see where it came from. For instance, prov:hadQuoter - can be found in merged.ttl as: @base <http://dvcs.w3.org/hg/prov/raw-file/tip/examples/eg-24-prov-o-html-examples/rdf/create/rdf/property_hadQuoter.ttl> . # ... prov:hadQuoter <http://data.semanticweb.org/person/luc-moreau>; # ... And so it is rdf/property_hadQuoter.ttl that needs to be fixed (or deleted). The final step is in Protege 4.2 is to turn on the Reasoner and see if our mega-merge is consistent. This turn out not to be the case - but mainly because we have reused some terms in the examples - like : * First flip in the top drop-down box to PROV-O to run the reasoner on this. * Under Reasoner, select Fact++ * Under Reasoner, click Start Reasoning ** This should succeed * Now in the drop-down, go back to merged.ttl * Under Reasoner, click Start Reasoning ** It will complain that the ontology is inconsistent ** Wait 2 seconds (not sure why) ** Click "Explain" *** Protege will compute explanations for a while, I got at least 36 before I clicked Stop. Unfortunately I don't seem to be able to export the explanations in text form. Example explanation: > 'The Painter' invalidatedAtTime "2012-09-02T01:31:00Z" > invalidatedAtTime Range: dateTime (here the error is probably that ^^xsd:dateTime is missing in the literal) > filling-fuel endedAtTime "2012-04-24T18:31:00Z"^^xsd:dateTime > Functional: startedAtTime > filling-fuel endedAtTime "2012-04-24T18:21:00Z"^^xsd:dateTime (Here the error is that two examples state endedAtTime for the same instance - but have different literal values) > > draft2 qualifiedAssociation _:genid113 > Activity DisjointWith Entity > qualifiedAssociation Domain Activity > draft2 wasRevisionOf e1 > wasRevisionOf Domain Entity Here the problem is that 'draft2' has been asserted with both wasRevisionOf and qualifiedAssociation - but their domains are disjoint; it can't both be an Activity and Entity. This bug is in rdf/class_Revision.ttl. There are a few more - but there are some common patterns. I suggest: * Rename example instances that are distinct * Fix errors such as qualifiedAssociation above (check: Is the error in the example or the OWL? Note that merged.ttl imports from http://dvcs.w3.org - so if you change ProvenanceOntology.owl - do a push before reloading in Protege) * Re-merge and try again .. Once the ontology is consistent - it is possible to do File -> Export inferred axioms to ontology. As an exercise - here are the inferred axioms from ProvenanceOntology.owl: http://dvcs.w3.org/hg/prov/file/a068151bca91/examples/eg-24-prov-o-html-examples/rdf/create/implied-provo.owl I've had a look at this, and most of this are obvious inferences that reasons need: 56 <http://www.w3.org/ns/prov#agent> rdf:type owl:ObjectProperty ; 60 owl:inverseOf [ owl:inverseOf <http://www.w3.org/ns/prov#agent> 61 ] . (this could be one of the reasons why we don't have inverses for every property!) I looked through this list and did not find anything controversial. -- Stian Soiland-Reyes, myGrid team School of Computer Science The University of Manchester
Received on Tuesday, 3 July 2012 11:19:28 UTC