[Proposal][SKOS-Core] Collections

Hi all,

I think I have a sensible compromise for handling collections that requires the 
minimum amount of new vocabulary, and can cope with all the scenarios outlined 
in [1].

Proposed to add to SKOS Core:

Classes:

  - Collection
  - CollectableProperty

Properties:

  - member (domain: Collection)
  - memberList (domain: Collection)

-----------------------------------------------------
So for unordered collections, an example would be ...

<skos:Concept rdf:about="c1">
	<skos:prefLabel>Aircraft</skos:prefLabel>
	<skos:narrower>
		<skos:Collection>
			<rdfs:label>aircraft by function</rdfs:label>
			<skos:member rdf:resource="c10"/>
			<skos:member rdf:resource="c11"/>
			<skos:member rdf:resource="c12"/>
		</skos:Collection>
	</skos:narrower>
</skos:Concept>

And for ordered collections, an example would be ...

<skos:Concept rdf:about="c1">
	<skos:prefLabel>Aircraft</skos:prefLabel>
	<skos:narrower>
		<skos:Collection>
			<rdfs:label>aircraft by size</rdfs:label>
			<skos:member rdf:resource="c10"/>
			<skos:member rdf:resource="c11"/>
			<skos:member rdf:resource="c12"/>
			<skos:memberList rdf:parseType="Collection">
				<skos:Concept rdf:about="c11"/>
				<skos:Concept rdf:about="c10"/>
				<skos:Concept rdf:about="c12"/>
			</skos:memberList>
		</skos:Collection>
	</skos:narrower>
</skos:Concept>

Collections may also be nested, e.g. ...

<skos:Concept rdf:about="c2">
   <skos:prefLabel>Chairs</skos:prefLabel>
   <skos:narrower>
     <skos:Collection>
       <rdfs:label>chairs by function</rdfs:label>
       <skos:member rdf:resource="c20"/>
       <skos:member rdf:resource="c21"/>
       <skos:member rdf:resource="c22"/>
       <skos:member>
         <skos:Collection>
           <rdfs:label>ceremonial chairs</rdfs:label>
           <skos:member rdf:resource="c25"/>
           <skos:member rdf:resource="c26"/>
           <skos:member rdf:resource="c27"/>
         </skos:Collection>
       </skos:member>
     </skos:Collection>
   </skos:narrower>
</skos:Concept>

... and if the collections are ordered, an rdf:nodeID could be used to refer to 
the nested collection in the memberlist.

The point of the 'CollectableProperty' class is that we can express a rule:

(x,p,c) (c,skos:member,m) (p,rdf:type,skos:CollectableProperty)
->
(x,p,m)

... so this proposal also includes adding the following statements to SKOS Core:

  - (skos:narrower rdf:type skos:CollectableProperty)
  - (skos:broader rdf:type skos:CollectableProperty)
  - (skos:related rdf:type skos:CollectableProperty)

If there are no objections, and I don't think up anything better in the next few 
days, I'll action this next week (I'd really like to get this one sewn up).

Al.

[1] http://esw.w3.org/topic/SkosDev/SkosCore/CollectionsAndArrays


P.S.

To support stricter validation of SKOS data, we could also add a class 
'Collectable', with sub-classes (skos:Concept) and (skos:Collection) - which 
would enable us to assert a range for the 'member' property.  I didn't include 
this in the main proposal, because I don't know if it's worth doing.



-- 
Alistair Miles
Research Associate
CCLRC - Rutherford Appleton Laboratory
Building R1 Room 1.60
Fermi Avenue
Chilton
Didcot
Oxfordshire OX11 0QX
United Kingdom
Email: a.j.miles@rl.ac.uk
Tel: +44 (0)1235 445440

Received on Friday, 27 August 2004 17:11:12 UTC