- From: <Patrick.Stickler@nokia.com>
- Date: Wed, 17 Sep 2003 12:27:56 +0300
- To: <garret@globalmentor.com>, <danbri@w3.org>
- Cc: <Art.Barstow@nokia.com>, <www-rdf-interest@w3.org>, <Patrick.Stickler@nokia.com>
> -----Original Message----- > From: ext Garret Wilson [mailto:garret@globalmentor.com] > Sent: 17 September, 2003 00:54 > To: Dan Brickley > Cc: Barstow Art (NMP-MSW/Boston); www-rdf-interest@w3.org > Subject: Re: Enumeration in RDF? > > > > > Dan Brickley wrote: > > * Art.Barstow@nokia.com <Art.Barstow@nokia.com> [2003-09-15 > 11:49-0400] > > > >>Do the latest RDF specs define a way to do enumeration > >>(e.g. a Bag may contain only 4 strings)? If so, please > >>send me the pointer. > > > > > > http://www.w3.org/TR/rdf-schema/#ch_collectionvocab > > The rdf:List collections mechanism allows the members of a > list to be > > enumeated in a way that makes it clear the whole list has been > > represented. > > But as one can always add an infinite number of rdf:first > properties to > any rdf:List resource (see your citation about), does this > really help > ensure that nothing more is added to a list---or even, as you put it, > "makes it clear the whole list has been represented?" > > Saying we ignore the new rdf:first properties doesn't help, > because that > would make rdf:List unstable---once someone adds another > rdf:first to an > rdf:List, which rdf:first is part of the "whole list" and > which one isn't? > > Garret [Disclaimer: This is my personal opinion, and is probably contrary to the more prevalent opinions of the RDF Core WG] The problem identified about, that of conflicting definitions of collections, is why, IMO, collections in RDF are essentially out of place in RDF. One of the most fundamental characteristics of RDF is the ability to freely syndicate knowledge from disparate sources. If one schema defines the members of a collection, and another schema defines additional members, the total set of members should merge seamlessly. Collections, being structures, go contrary to that, as there is no formally defined way to merge collections. The chief motivation (apparently) for collections, especially the new list structure, is to somehow have control over the defined members of a collection. But in fact, the design fails to do that, since RDF has no official means of keeping track of source and/or authority (though one *can* use reification, but being able to do something does not make it "the" way to do it). The argument goes like this: since rdf:first and rdf:rest can be given a cardinality of 1, we can detect contradictions if someone else tries to modify a previously defined list. Fair enough. That's true. BUT... Since source/authority is not, by the standard, tracked for assertions, an application is left with no means to determine *who* modified the list or which possible variant was the original. And if a given application employs additional machinery, such as reification or some other proprietary extension, to track source/authority for each statement, so that one *could* determine which statements correspond to the original, the very *need* for the collection structure evaporates, since one could simply just ask for all membership assertions asserted by that particular source/authority, which would simply disregard any asserted modifications. BUT, if the same authority makes membership assertions in different sources, the total membership is seamlessly merged in the graph when viewing those membership assertions through the particular "filter" of that authority. This approach also allows one to assert cardinality of membership on collections, which can be considered specific to the context of that authority, avoiding conflicting cardinality assertions by other sources/authorities. Collections in RDF seem overly influenced by its XML associations and ill suited to the dynamic nature of arbitrary knowledge syndication, and these problems relating to preserving the integrity of originally expressed collections and constraining the membership of collections reflects, IMO, the ill suited nature of these constructs. That said... and getting back to the topic of the thread... ;-) One can achieve cardinality (and other) constraints for collections effectively by defining a custom container class and a subproperty of rdfs:member, e.g. to define a collection that takes 4 and only 4 xsd:integer values: ex:myCollection rdfs:subClassOf rdfs:Container . ex:myMember rdfs:subPropertyOf rdfs:member ; rdfs:domain ex:myCollection ; rdfs:range xsd:integer ; owl:cardinality "4"^^xsd:nonNegativeInteger . and thus ex:foo a ex:myCollection ; ex:myMember "1"^^xsd:integer ; ex:myMember "-18"^^xsd:integer ; ex:myMember "128891"^^xsd:integer ; ex:myMember "0"^^xsd:integer . would be valid, but ex:bar a ex:myCollection ; ex:myMember "1"^^xsd:integer ; ex:myMember "blargh"^^xsd:string ; ex:myMember "128891"^^xsd:integer . would not be valid, due to (a) too few members and incompatible value types (datatypes). Reifying the statements according to source (and thus, implicitly according to authority per the owner of that source) allows one to be clear about the membership of a given collection insofar as a given source and/or authority is concerned. If ex:myMember assertions are made from some other source/authority, one can choose to ignore them, or choose between the conflicting sources/authorities, without having to muck about with explicit *structures*, but rather simply consuming knowledge within a particularly defined context of trust. Regards, Patrick -- Patrick Stickler Nokia, Finland patrick.stickler@nokia.com
Received on Wednesday, 17 September 2003 05:29:14 UTC