- From: Brian McBride <bwm@hplb.hpl.hp.com>
- Date: Thu, 10 Apr 2003 18:32:24 +0100
- To: Francesco Cannistrà <fracan@inwind.it>, <www-rdf-interest@w3.org>
Folks, Please do not crosspost replies to rdf-interest and rdf-comments. Francesco, Please pick a list and don't cross post. Per your suggestion, what would happen if one had a graph containing a bag of people and another bag of apples. Brian At 17:34 10/04/2003 +0200, Francesco Cannistrà wrote: >Hi All, > >I wrote this mail in order to have feebacks about a possible approach to >solve the so called "long range" problem in the scope of core RDFS, >without need of other issues. >The "long range" problem is the inability of RDFS of providing means to >define typed containers, that is, to specify, into a vocabulary schema, >the type of container members in cases where the range of a property is >structured as a container of elements (rdf:Bag, rdf:Seq and rdf:Alt). > >I think this is a real problem that introduces a very important issue and >that needs a general solution that can apply to the general RDFS domain. >Here I won't say more about the importance of this issue. I only call the >attention of those who know CC/PP and UAProf (on which I work) about the >problems that this hole causes. > >I explain my approach through a practical example. >Say I want to specify a vocabulary (hereafter referenced with the prefix >"voc") that defines the class voc:Group whose instances represent groups >of persons. Each person is a resource of type voc:Person. For each >resource of type voc:Group should be asserted 2 properties: the property >voc:chair with value of type voc:Person and the property voc:partecipants >whose value is a Bag whose members should be of type voc:Person. The >problem is that I want the vocabulary schema to constrain the elements of >this Bag to be of type voc:Person. >A RDF description instancing the vocabulary schema should look as follows: > >01: <?xml version="1.0"?> > >02: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >03: xmlns:voc="http://example.com/exampleVocabulary.rdfs#"> >04: <rdf:Description rdf:ID="MyGroup"> >05: <rdf:type rdf:resource="voc:Group"> >06: <voc:chair> >07: <rdf:Description rdf:ID="Francesco"> >08: <rdf:type >rdf:resource="http://example.com/exampleVocabulary.rdfs#Person" /> >09: <voc:name>Francesco</voc:name> >10: <voc:mail>francesco@persons.com</voc:mail> >11: </rdf:Description> >12: </voc:chair> >13; <voc:partecipants> >14: <rdf:Bag> >15: <rdf:_1 rdf:resource="#Francesco" /> >16: <rdf:_2> >17: <rdf:Description rdf:ID="Daniela"> >18: <rdf:type >rdf:resource="http://example.com/exampleVocabulary.rdfs#Person" /> >19: <voc:name>Daniela</voc:name> >20: <voc:mail>daniela@persons.com</voc:mail> >21: </rdf:Description> >22: </rdf:_2> >23: <rdf:_3> >24: <rdf:Description rdf:ID="Giovanni"> >25: <rdf:type >rdf:resource="http://example.com/exampleVocabulary.rdfs#Person" /> >26: <voc:name>Giovanni</voc:name> >27: <voc:mail>giovanni@persons.com</voc:mail> >28: </rdf:Description> >29: </rdf:_3> >30: </rdf:Bag> >31: </voc:partecipants> >32: </rdf:Description> > >33: </rdf:RDF> > >The vocabulary schema that, I think, could solve the problem is as follows: > >01: <?xml version="1.0"?> > >02: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >03: xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" >04: xmlns:base="http://example.com/exampleVocabulary.rdfs" > > <!-- ****************** The Group Type ****************** --> > >05: <rdf:Description rdf:ID="Group"> >06: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" /> >07: <rdf:subClassOf >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource" /> >08: </rdf:Description> > >09: <rdf:Description rdf:ID="chair"> >10: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Property" /> >11: <rdf:domain rdf:resource="#Group" /> >12: <rdf:range rdf:resource="#Person" /> >13: </rdf:Description> > >14: <rdf:Description rdf:ID="partecipants"> >15: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Property" /> >16: <rdf:domain rdf:resource="#Group" /> >17: <rdf:range rdf:resource="#PersonBag" /> >18: </rdf:Description> > > <!-- ****************** The Person Type ****************** --> > >19: <rdf:Description rdf:ID="Person"> >20: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" /> >21: <rdf:subClassOf >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource" /> >22: </rdf:Description> > >23: <rdf:Description rdf:ID="name"> >24: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Property" /> >25: <rdf:domain rdf:resource="#Person" /> >26: <rdf:range >rdf:resource="http://www.w3.org/2000/01/rdf-schema#http://www.w3.org/2000/01/rdf-schema#Literal" >/> >27: </rdf:Description> > >28: <rdf:Description rdf:ID="mail"> >29: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Property" /> >30: <rdf:domain rdf:resource="#Person" /> >31: <rdf:range rdf:resource="rdfs:Literal" /> >32: </rdf:Description> > > <!-- ****************** The PersonBag Type ****************** --> > >33: <rdf:Description rdf:ID="PersonBag"> >34: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" /> >35: <rdf:subClassOf >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Bag" /> >36: </rdf:Description> > >37: <rdf:Description >rdf:about="http://www.w3.org/2000/01/rdf-schema#member"> >38: <rdf:type >rdf:resource="http://www.w3.org/2000/01/rdf-schema#Property" /> >39: <rdf:domain rdf:resource="#PersonBag" /> >40: <rdf:range rdf:resource="#Person" /> >41: </rdf:Description> > >42: </rdf:RDF> > >This schema example solves the "long range" problem if semantic of >the schema is that one outlined below: > >1. The statements throughout rows 37-41 in the schema mean that, > when > * the property rdfs:member is asserted for a resource of type > voc:PersonBag (i.e. when its domain falls into a subclass of its overall > domain rdfs:Resource), > then > ** the range of such a property is voc:Person (i.e. its range > must fall into a subclass of its overall range rdfs:Resource). > >2. Because > * the class voc:PersonBag is defined as a "subClassOf" > rdf:Bag (rows 33-36), > ** to resources of type rdf:Bag apply properties (rdf:_1, > rdf:_2, etc.) that are "subPropertyOf" rdfs:member, > then a powerful processor may infer that > *** properties rdf:_n apply to resource of type voc:PersonBag too, > **** when such a property is asserted for a resource of type > voc:PersonBag, as a consequence of 1.** and 2.**, its range must be voc:Person. > >3. When in the RDF description above (hereafter referenced with prefix >"desc"): > * I introduce the resource desc:MyGroup of type voc:Group, > ** assert that desc:MyGroup has the voc:partecipants property > whose value is a resource of type rsd:Bag; > then, provided with knowledge of the vocabulary schema, my > processor may infer that: > *** the value of the property voc:partecipants is type > voc:PersonBag (that is a subclass of rdf:Bag), > **** in order for the RDF description to respect constraint in > the vocabulary schema, elements of the Bag resource (values of rdf:_n) > must be of type voc:Person. > >This seems to me as reasonable, but I have some doubts: > >Q1) Are rows 37-40 in the vocabulary schema valid RDF statements that >comply with RDFS? > >Q2) Are sentence 1, 2 and 3 correct? > >Q3) Do these sentences comply with RDFS semantics (or do they add >semantics out of scope of RDFS)? > >If the answer to these question is positive, this approach can solve, I >think, the "long range" problem in the scope of core RDFS, without the >need of demanding its solution to future RDFS extensions or to ontology >languages. > >Do you have some suggestions about this? >I would be pleased to know your opinion in order to realize whether my >thoughts are valid. > >Regards, > >Francesco Cannistrà.
Received on Thursday, 10 April 2003 13:33:06 UTC