typed containers in RDFS: suggestions about the "long range" problem

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,
        *     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),
        **    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.


Francesco CannistrÓ.

Received on Thursday, 10 April 2003 11:38:02 UTC