- From: Jason Kinner <jason_kinner@dynamicdigitalmedia.com>
- Date: Wed, 4 Jun 2003 22:22:37 -0400
- To: <www-rdf-dspace@w3.org>
- Message-ID: <007801c32b09$58659c20$0400a8c0@STARGATE>
All - Below are three examples. The scenario is quite simple: an Actuality is created with a certain property value. This property value is then changed. The three different examples have very little that is different between them, besides some additional productions produced by the inferencing engine. I have my own commentary inline. Let's stick with this simple example for now, and I will try to produce a more complex example involving actual schema extension within the day. One difficulty I had in analyzing these models was that "creates" and "modifies" are effectively modeled using the "creates" and "hasPatient" properties of Harmony ABC. -Jason PS - I leave it as an exercise for the reader to pump these XML representations through the RDF Validator [1] to produce graphs and/or tuples. [1] http://www.w3.org/RDF/Validator/ Example 1: Using only Harmony ABC properties with sub-classes for Action, Event, and Actuality classes: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xml:base="http://dspace.org/history/1.0#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:abc="http://www.metadata.net/harmony#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dsh="http://dspace.org/history/1.0#" > <dsh:Created rdf:about="urn:1"> <abc:hasAction> <dsh:Create rdf:about="urn:2"> <abc:creates rdf:resource="hdl:1234/123"/> </dsh:Create> </abc:hasAction> <abc:hasPatient rdf:resource="hdl:1234/123"/> <abc:precedes rdf:resource="urn:3"/> </dsh:Created> <abc:Situation rdf:about="urn:3"> </abc:Situation> <dsh:Item rdf:about="hdl:1234/123;1"> <dc:title>My Example</dc:title> <abc:inContext rdf:resource="urn:3"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </dsh:Item> <dsh:Modified rdf:about="urn:4"> <abc:hasPatient rdf:resource="hdl:1234/123"/> <abc:follows rdf:resource="urn:3"/> <abc:precedes rdf:resource="urn:5"/> </dsh:Modified> <abc:Situation rdf:about="urn:5"> </abc:Situation> <dsh:Item rdf:about="hdl:1234/123;2"> <dc:title>Our Example</dc:title> <abc:inContext rdf:resource="urn:5"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </dsh:Item> </rdf:RDF> Notes: Seems useful. Does not restrict existing (or, presumably, new) properties, but does provide type information that can be used to restrict result set on query (e.g. - What "Bitstreams" have changed?). New properties would provide a way to select for types of change (e.g. - What "Bitstreams" have had their "format" changed?) Example 2: Using only derived properties and ABC classes: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xml:base="http://dspace.org/history/1.0#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:abc="http://www.metadata.net/harmony#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dsh="http://dspace.org/history/1.0#" > <abc:Event rdf:about="urn:1"> <abc:hasAction> <abc:Action rdf:about="urn:2"> <dsh:createsItem rdf:resource="hdl:1234/123"/> </abc:Action> </abc:hasAction> <abc:hasPatient rdf:resource="hdl:1234/123"/> <abc:precedes rdf:resource="urn:3"/> </abc:Event> <abc:Situation rdf:about="urn:3"> </abc:Situation> <abc:Actuality rdf:about="hdl:1234/123;1"> <dc:title>My Example</dc:title> <abc:inContext rdf:resource="urn:3"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </abc:Actuality> <abc:Event rdf:about="urn:4"> <dsh:modifies rdf:resource="hdl:1234/123"/> <abc:follows rdf:resource="urn:3"/> <abc:precedes rdf:resource="urn:5"/> </abc:Event> <abc:Situation rdf:about="urn:5"> </abc:Situation> <abc:Actuality rdf:about="hdl:1234/123;2"> <dc:title>Our Example</dc:title> <abc:inContext rdf:resource="urn:5"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </abc:Actuality> </rdf:RDF> Notes: Loses validation of Actuality properties by removing type information; seems to be a valuable place for validation. Also, changes in type (which do occur after accession) cannot be managed using this model. Example 3: Using sub-properties and sub-classes: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xml:base="http://dspace.org/history/1.0#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:abc="http://www.metadata.net/harmony#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dsh="http://dspace.org/history/1.0#" > <dsh:Created rdf:about="urn:1"> <abc:hasAction> <dsh:Create rdf:about="urn:2"> <dsh:creates rdf:resource="hdl:1234/123"/> </dsh:Create> </abc:hasAction> <abc:hasPatient rdf:resource="hdl:1234/123"/> <abc:precedes rdf:resource="urn:3"/> </dsh:Created> <abc:Situation rdf:about="urn:3"> </abc:Situation> <dsh:Item rdf:about="hdl:1234/123;1"> <dc:title>My Example</dc:title> <abc:inContext rdf:resource="urn:3"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </dsh:Item> <dsh:Modified rdf:about="urn:4"> <dsh:modifies rdf:resource="hdl:1234/123"/> <abc:follows rdf:resource="urn:3"/> <abc:precedes rdf:resource="urn:5"/> </dsh:Modified> <abc:Situation rdf:about="urn:5"> </abc:Situation> <dsh:Item rdf:about="hdl:1234/123;2"> <dc:title>Our Example</dc:title> <abc:inContext rdf:resource="urn:5"/> <abc:phaseOf rdf:resource="hdl:1234/123" /> </dsh:Item> </rdf:RDF> Notes: Redefining ABC properties just to restrict scope doesn't seem to add much value to queries. It would seem redundant to produce a property called "modifiesItem" just to restrict the range of the property (not that redundancy is always a bad thing). If I throw out query complexity, I would rather allow the user to query for "What things were modified?" and require a type qualifier for "What Items were modified?".
Received on Wednesday, 4 June 2003 22:22:49 UTC