This is an archive of an inactive wiki and cannot be modified.

SKOS ISSUE-33: "Bundles" Proposal

This is a proposal for resolution of SKOS [http://www.w3.org/2006/07/SWD/track/issues/33 ISSUE-33: GroupingConstructs].

0. Summary

This proposal deprecates all current features of SKOS relating to "collections" http://www.w3.org/TR/2005/WD-swbp-skos-core-guide-20051102/#seccollections SKOS-GUIDE-SEC-COLLECTIONS, because of a number of serious issues, and introduces new features in replacement, where these issues are resolved.

In addition to the basic contradiction captured in ISSUE-33, other issues resolved are:

1. Vocabulary

The following vocabulary is required by this proposal:

skos:Bundle skos:bundleMembers skos:bundleIsOrdered

The following vocabulary is deprecated by this proposal:

skos:Collection skos:OrderedCollection skos:member skos:memberList

2. Axiomatic Triples

The following triples are axiomatic for this proposal:

skos:bundleMembers rdfs:domain skos:Bundle.BRskos:bundleMembers rdfs:range rdf:List.BRskos:bundleIsOrdered rdfs:domain skos:Bundle.BRskos:bundleIsOrdered rdfs:range xsd:boolean.BRskos:Bundle owl:disjointWith skos:Concept.

3. Semantic Conditions

There are no further semantic conditions.

4. Consistent Examples

An example of an unordered bundle with a label:

@prefix ex: <http://www.example.com/eg#> .
# conventional prefixes

ex:buffalomilk rdf:type skos:Concept;
  skos:prefLabel "buffalo milk"@en.

ex:cowmilk rdf:type skos:Concept;
  skos:prefLabel "cow milk"@en.

ex:goatmilk rdf:type skos:Concept;
  skos:prefLabel "goat milk"@en.

ex:sheepmilk rdf:type skos:Concept;
  skos:prefLabel "sheep milk"@en.

[] rdf:type skos:Bundle;
  rdfs:label "milk by source animal"@en;
  skos:bundleIsOrdered "false"^^xsd:boolean;
  skos:bundleMembers (ex:buffalomilk ex:cowmilk ex:goatmilk ex:sheepmilk).

An example of an ordered bundle with a label:

ex:infants rdf:type skos:Concept;
  skos:prefLabel "infants"@en.

ex:children rdf:type skos:Concept;
  skos:prefLabel "children"@en.

ex:adults rdf:type skos:Concept;
  skos:prefLabel "adults"@en.

[] rdf:type skos:Bundle;
  rdfs:label "people by age"@en;
  skos:bundleIsOrdered "true"^^xsd:boolean;
  skos:bundleMembers (ex:infants ex:children ex:adults).

5. Inconsistent Examples

Because skos:Bundle and skos:Concept are declared as disjoint classes, the following example is inconsistent.

ex:milk rdf:type skos:Concept;
  skos:prefLabel "milk"@en;
  skos:narrower [
    rdf:type skos:Bundle;
    rdfs:label "milk by source animal"@en;
    skos:bundleIsOrdered "false"^^xsd:boolean;
    skos:bundleMembers (ex:buffalomilk ex:cowmilk ex:goatmilk ex:sheepmilk).
  ].

6. Entailment Rules

There are no additional entailment rules.

7. Syntactic Constraints

There are no syntactic constraints.

8. Discussion

There are several issues concerning the current support in SKOS for "meaningful groupings of concepts". The most serious of these is the self-contradiction within the SKOS specs, which is capture in ISSUE-33. There are other issues also.

The first of these is that it is not possible to explicitly state that a grouping is not ordered. An unordered group is the default assumption, given a lack of any explicit ordering information. SKOS applications, therefore, are required to perform a kind of default reasoning, which adds some complexity to both specifications and implementation.

The second of these is that there is a logical dependency between the skos:member and skos:memberList properties, which is stated in http://www.w3.org/TR/2005/WD-swbp-skos-core-guide-20051102/#seccollections SKOS-GUIDE-SEC-COLLECTIONS as a rule, using the Jena rule syntax. This dependency is complicated and unnecessary.

The third issue is non-technical, and concerns naming. The name "Collection" is used in RDF to denote lists; it is also used in library, museum and archives communities to denote a set of objects such as a collection of books or art works. It has been argued that URIs should be treated as opaque, and therefore it doesn't matter what the URI is. However, from a practical point of view, the choice of name does affect the ease of writing clear specifications. There is, clearly, an overlap between the use of "Bundle" as proposed here, and the use of "bundles" to informally denote groups of "tags" in a folksonomy, although this may not be inappropriate.

Because of these issues, this proposal suggests a fresh start. Although proposals that have the smallest impact for current implementations would normally be favoured, in this case all implementations will have to make a fundamental change anyway in order to resolve the fundamental contradiction in ISSUE-33, so the additional changes proposed do not call for much extra effort. It also makes it very simple to identify deprecated usage, because all the old URIs are deprecated.

In order to show the label of a bundle as part of a hierarchical display, this proposal assumes the use of a simple algorithm. This algorithm is the same as that described in SkosDesign/GroupingConstructs/ProposalOne.

Take for example the following snippet from a thesaurus that uses "node labels":

milk
.<milk by source animal>
..buffalo milk
..cow milk
..goat milk
..sheep milk

Under this proposal, the concepts and their paradigmatic relationships must first be explicitly stated, i.e.:

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#milk">
    <skos:prefLabel>milk</skos:prefLabel>
    <skos:narrower rdf:resource="http://www.example.com/concepts#buffalomilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#cowmilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#goatmilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#sheepmilk"/>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#buffalomilk">
    <skos:prefLabel>buffalo milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#cowmilk">
    <skos:prefLabel>cow milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#goatmilk">
    <skos:prefLabel>goat milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#sheepmilk">
    <skos:prefLabel>sheep milk</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

A labelled bundle can then be declared also:

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:Bundle>
    <rdfs:label xml:lang="en">milk by source animal</rdfs:label>
    <skos:bundleIsOrdered rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</skos:bundleIsOrdered>
    <skos:bundleMembers rdf:parseType="Collection">
      <skos:Concept rdf:about="http://www.example.com/concepts#buffalomilk"/>
      <skos:Concept rdf:about="http://www.example.com/concepts#cowmilk"/>
      <skos:Concept rdf:about="http://www.example.com/concepts#goatmilk"/>
      <skos:Concept rdf:about="http://www.example.com/concepts#sheepmilk"/>
    </skos:bundleMembers>
  </skos:Bundle>

</rdf:RDF>

The thesaurus hierarchy (i.e. tree) can then be constructed from these graphs, by using a simple algorithm.

Informally, the algorithm starts from the milk concept, and constructs a tree node labelled "milk". Then, all narrower concepts are considered. For each concept which is not a member of a bundle, a tree node is constructed and added as a direct child of "milk". However, if some or all of the narrower concepts are members of a labelled bundle, then a child tree node is first added with the bundle label (in this case all concepts are members of the bundle labelled "milk by source animal"). Tree nodes are then constructed for all members of the bundle, and added as children of the group node.

Note that it is not specified how the algorithm should handle situations where concepts have multiple broader concepts (i.e. "polyhierarchies"). The algorithm might therefore lead to the spurious introduction of bundle labels in multiple locations in a hierarchy - this needs some test cases.

It is also not clear how this algorithm handles nested bundles.

N.B. Under this proposal, applications can safely be written that completely ignore the grouping constructs. This is a significant advantage of this proposal.



CategoryTemplate

SkosDesign/GroupingConstructs/ProposalTwo (last edited 2007-05-08 11:56:32 by AlistairMiles)