- From: Jevon Wright <jevon@jevon.org>
- Date: Thu, 22 Oct 2009 12:11:15 +1300
- To: public-owl-dev@w3.org
- Message-ID: <2f3e58960910211611y48639ee0yeeb5299d8b2820e3@mail.gmail.com>
Hi, I am working on extending an ontology to select particular groups of equivalent classes from the base ontology, for validation of an ontology instance. I have come across a situation which doesn't seem to be solvable within OWL 2 DL, and as far as I can tell, there are no OWL 2 Full reasoners available. This is the base ontology: SubClassOf(Page Destination) ObjectPropertyDomain(events Page) ObjectPropertyRange(events Event) ObjectPropertyDomain(action Event) ObjectPropertyRange(action Action) ObjectPropertyDomain(to Action) ObjectPropertyRange(to Destination) DataPropertyDomain(name Event) DataPropertyRange(name xsd:string) That is, a Page (subclass of Destination) can have an Event, which has an Action, which has a reference to another Destination. What I would like to achieve is select all cycles in ontology instances, i.e. all Pages that have an Event/Action chain that eventually points to itself - a cycle of event/action redirections. I define an equivalent subclass EventAccess which is all Events with the name "access": SubClassOf(EventAccess Event) EquivalentClasses(EventAccess ObjectIntersectionOf(DataHasValue(name "access") Event)) In order to select this class later, I assert that all of these classes have a new "isAccessEvent" property, thanks to the OWA: Declaration(ObjectProperty(isAccessEvent)) SubClassOf(EventAccess ObjectSomeValuesFrom(isAccessEvent owl:Thing)) I then define a subclass of Page called PageRedirects, which represents a Page that contains an Event, which has an Action, that points to another Page.This is achieved though property chains, and uses the "property o inv(property)" approach of selecting a particular class. This "pageAccessTo" property, which points to the possible Pages that this Page may redirect to, is also defined as transitive. Declaration(ObjectProperty(pageAccessTo)) TransitiveObjectProperty(pageAccessTo) ObjectPropertyDomain(pageAccessTo Page) ObjectPropertyRange(pageAccessTo Page) SubObjectPropertyOf(SubObjectPropertyChain(events isAccessEvent InverseObjectProperty(isAccessEvent) action to) pageAccessTo) Declaration(Class(PageRedirects)) EquivalentClasses(PageRedirects ObjectIntersectionOf(ObjectSomeValuesFrom(pageAccessTo Page) Page)) SubClassOf(PageRedirects Page) Up to this stage, there is no problem. I can create individuals in Protege and use the FaCT reasoner, and the Pellet reasoner, to infer that individuals are correctly equivalent to PageRedirects. However, now I want to select all PageRedirects which eventually redirect to itself, using the transitive property above. I define an equivalent class CyclicPage, which is all PageRedirects which redirects to itself: EquivalentClasses(CyclicPage ObjectIntersectionOf(ObjectExistsSelf(pageAccessTo) PageRedirects)) SubClassOf(CyclicPage PageRedirects) This is where the ontology fails. On further investigation, it appears this is because this transitive, self-referencing property is part of OWL 2 Full, and not OWL 2 DL; and the reasoners I have tried (FaCT, Pellet) can only support OWL 2 DL. Is there another approach that would let me select transitive self-referencing properties, or achieve what I'd like to do, within the OWL 2 DL restrictions? Thanks, Jevon
Received on Wednesday, 21 October 2009 23:11:50 UTC