- From: Michael Schneider <m_schnei@gmx.de>
- Date: Wed, 11 Apr 2007 22:44:21 +0200
- To: matthew.pocock@ncl.ac.uk
- CC: rogargon@gmail.com, alanruttenberg@gmail.com, semantic-web@w3.org, public-owl-dev@w3.org
Hi, Matthew! What you describe here, your array and your linked-list construction, is what I referred to as "custom OWLList classes", and (as far as I understood him) is pretty similar to what Alan Ruttenberg was about in his two answers to Roberto's questions. And as I said before, I think that such an approach (your approach!) is (technically) the best one can do in OWL/DL. With my own analysis I only tried to answer Roberto's original question: If it is somehow possible (in OWL/DL) to use an rdf:Bag and build an allValuesFrom restriction for its members, and if it is good practice to do so. My answer was, that it /is/ possible, but with several ugly limitations, which few people would probably be willing to accept. So no good practice at all! My opinion: One can, of course, always use a custom approach of the form you and Alan proposed - it works. But I suppose that many people will dislike the situation to always build their own custom list types, while there is already a lot of collection vocabulary in RDF, which they can only use either in a very limited way, like for rdf:Bag and friends, or not at all, like for rdf:List. Perhaps, it would have been wiser to not use 'rdf:List' in the OWL-to-RDF mappings (like e.g. for the argument list of owl:intersectionOf expressions), but instead use a custom OWLList for this purpose. This would have resulted in some inconveniences when writing down things like intersection expressions with many classes in RDF/N3 or RDF/XML, where rdf:ListS are supported by special syntax. But then, it would have been at least possible to use rdf:List in OWL axioms, if I correctly understand the situation (FIXME if I'm wrong!). But other people here will probably disagree with this view. :) Cheers, Michael Matthew Pocock wrote on Tue, 10 Apr 2007 > Hi, > > Not sure if this kind of modelling will throw OWL reasoners for a loop, > although I'm sure someone on this list will know. Is there a reason you can't > explicitly have a collection individual and a member_of_collection style > property that binds an instance to the collection? > > For the case of a list, you can introduce a qua on the instance that stands > for the membership of the list. So, > > array <-member_of- member -refers_to-> someIndividual > > Where member has a property index, and index is set to be unique with respect > to the array instance, and the presence of a member with index x imples the > existance of a member with every index >=0 and < x. Alternatively, use a > linked list with e.g. a head/cons pair of relations and cardinality > restrictions to prevent unintended branching. > > Using collection instances like this you can restrict someIndividual to a > specific class by placing a universal restriction on the inverse of member_of > that places a universal restriction to revers_to on that class. So: > > PersonArray == Array & > all inverse(member_of) all refers_to Person > > The member qua instances tend to be useful places to hang other things than > the index from, if the individual at that index in the list needs treating > differently to the individual at other indexes or independent of the list. > > Sorry if you've been up and down this kind of solution already. > > Matthew
Received on Wednesday, 11 April 2007 20:44:15 UTC