- From: Ulrike Sattler <sattler@cs.man.ac.uk>
- Date: Fri, 12 Oct 2007 14:00:09 +0100
- To: Owl Dev <public-owl-dev@w3.org>
- Message-Id: <C9E9CB6E-1330-4C5E-87E2-46355A6D05A6@cs.man.ac.uk>
On 12 Oct 2007, at 12:14, Michael Schneider wrote: > > [CC'ed Peter Patel-Schneider, because I cite him in this mail] > > Hi list! > > I have started to stroll around a little through the OWL-1.1 issues > list > this week, and I found this interesting one (issue 30) yesterday > evening: > > "Need a role descrption based on the "cross product" of two > concepts" > http://code.google.com/p/owl1-1/issues/detail?id=30 > > (Sorry, I cannot find out who the original author "kashyap.vipul" > was.) > > After reading this I was not really sure if this issue is about > specifying > cross products in general, or just about realizing a specific > scenario, with > or without the use of a cross product. But IMHO it /is/ certainly a > noteworthy question if cross products can be specified in OWL or > not. I can > see that Peter Patel-Schneider has just commented on this issue: > > "You are asking for the ability to define roles. > > A similar definition would be > brother = sibling INTERSECTION range(Male) > using range(x) as a shorthand for crossProduct(owl:Thing,x) > this is a confusing shorthand: - if a property p has range X, say Male, then, whenever we find a tuple (a,b) in p, we know that b must be an instance of X. Eg, whenever a has a brother b, then b must be Male. - if we would say that p is the crossproduct between Y and X, then, given any two instances y of Y and x of X, we know that (y,x) are in p. This is very different from the above point. > This expands expressive power (I'm pretty sure). > I don't know whether there is a reasoning algorithm > for this construct." > no, there isn't. It is closely related to negation of properties, and this requires rather different reasoning techniques to those used successfully for OWL due to the "non-local" behaviour of negated properties. As an example for this relationship, for example, you can say that Every Petlover loves every Pet through: SubclassOf(PetLovers (AllValuesFrom (ComplementOf loves)) ComplementOf(Pet)) > I'm not quite clear if Peter means by "this construct" either the > problem of > specifying a cross product in OWL-1.1, or something else? Assuming > the first > of these options has motivated me to try out if I am able to > specify a cross > product in OWL-1.1. It really seems to work - with some restrictions > discussed below. > > > Task: For given classes A and B give an OWL-1.1 axiom set, by which a > property pAXB is specified to be equivalent to the cross product A > X B. > > Solution: > > (A0) ClassAssertion(w owl:Thing) > (A1) SubClassOf(A ObjectHasValue(pA w)) > (A2) SubClassOf(B ObjectHasValue(pB w)) > (A3) SubObjectPropertyOf( > SubObjectPropertyChain(pA InverseObjectProperty(pB)) > pAXB ) > (A4) ObjectPropertyDomain(pAXB A) > (A5) ObjectPropertyRange(pAXB B) > as above, I think you overestimate the power of domain and range restrictions. > Axiom (A0) demands the existence of /some/ arbitrary individual w. > I will > use this as a "glue instance" to connect two roles in a sub > property chain. > > Axioms (A1) and (A2) introduce roles 'pA' and 'pB', which are > intended to > represent the classes A and B, respectively. The domain of role pA > covers > class A (i.e. class A is a sub class of domain(pA)). The right hand > side of > a role instance of pA is /always/ the "glue instance" w. Analog for > role > 'pB'. > > Axiom (A3) makes role pAXB into a /super/ role of the cross product > A X B: > Let x and y be two instances for which A(x) and B(y) both hold. > According to > axioms (A1) and (A2), pA(x,w) and pB(y,w) both hold. Thus, the > inverse role > instance pB^-1(w,y) is true, too. Hence, by applying axiom (A3), > pAXB(x,y) > holds. > > Axioms (A4) and (A5) obviously make role pAXB into a /sub/ role of > the cross > product A X B = domain(pAXB) X range(pAXB). > > So we finally receive pAXB = A X B. > > > There are a several points which need some further discussion here: > > First: Is the above set of axioms allowed at all? I have checked the > "non-structural restrictions" given in [1]. Role pAXB is certainly a > "non-simple" role, as it appears as a super role of a sub role > chain. So > certain axioms, in which pAXB occurs, will not be allowed. But the > global > 'domain' and 'range' restrictions, as given by axioms (A4) and > (A5), are not > listed as forbidden restrictions in [1]. So this seems to be ok! (?) > > Second: About the "glue instance" w. The only real requirement was > that > there is /some/ instance in the universe (denoted by owl:Thing), > because > this alone suffices to use such an instance for glueing pA and pB^-1 > together in the above sub role chain. Even the two 'ObjectHasValue' > axioms > do not seem to put a dangerous restriction on 'w'. So it seems to be > possible for instance that I can reuse w for specifing the "glue > instance" > of a second role rCXD for other classes C and D without any > problem. Also, > if w occurs in other axioms of the ontology, this shouldn't be a big > problem, because it does not affect the fact that such a w / > exists/. Of > course, it must not happen that in the ontology's remaining axioms > one of > the "helper roles" 'pA' and 'pB' appears, but this can always be > avoided in > practice AFAICS. So the only thing which might be considered to be > at least > a /theoretical/ problem is that it will not be possible anymore to > interpret > such an OWL ontology over the /empty/ universe. But in practice, no > one will > really care about this lacking, and I am not even certain if doing > so is > allowed at all in OWL. > > Third: What are the ramifications for using role 'pAXB'? Being a > non-simple > role according to [1], pAXB suffers from not being allowed to > appear in > certain kinds of axioms. This is generally a problem, because it > means that > I cannot freely "play around" with pAXB, I always have to check > first. On > the other hand, from a pragmatical point of view, I do not see > immediate > applications for specifying cardinality restrictions on this cross > product > role. Also, making a cross product into a functional or inverse > functional > role will perhaps not happen too often, because it would have strong > implicit consequenses on the pair of original classes A and B. Same > for > irreflexivity and asymmetry axioms. So the axiom set above might > really be > of value for a large set of application scenarios. > > > You can find below an example ontology "crossproduct.owl" together > with some > Jena/Pellet demo code. The ontology contains the axioms above, > together with > the following assertions: > > * A(a1) > * A(a2) > * B(b1) > * B(b2) > > Also, I have made A a subclass of another class AA, and B a > subclass of > another class BB, and included the following additional assertions: > > * AA(aNOT) > * BB(bNOT) > > The demo code checks if all possible combinations of instances of A > and B > exist with property pAXB, while no tuple containing aNOT or bNOT as > one of > its components must exist with property pAXB. The result of running > the demo > is: > > *** allowed tuples MUST occur in pAXB *** > Exists tuple (a1,b1)? true > Exists tuple (a1,b2)? true > Exists tuple (a2,b1)? true > Exists tuple (a2,b2)? true > *** un-allowed tuples must NOT occur in pAXB *** > Exists tuple (aNOT,b1)? false > Exists tuple (aNOT,b2)? false > Exists tuple (a1,bNOT)? false > Exists tuple (a2,bNOT)? false > Exists tuple (aNOT,bNOT)? false > > > Cheers, > Michael > > [1] http://www.webont.org/owl/1.1/owl_specification.html#7 > > > ===== ontology "crossproduct.owl" ===== > > <?xml version="1.0"?> > <rdf:RDF > xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > xmlns="http://example.org/crossproduct.owl#" > xmlns:owl="http://www.w3.org/2002/07/owl#" > xmlns:xsd="http://www.w3.org/2001/XMLSchema#" > xmlns:daml="http://www.daml.org/2001/03/daml+oil#" > xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > xml:base="http://example.org/crossproduct.owl"> > <owl:Ontology rdf:about=""> > <owl:versionInfo rdf:datatype="http://www.w3.org/2001/ > XMLSchema#string" >> Created with TopBraid Composer</owl:versionInfo> > </owl:Ontology> > <owl:Class rdf:ID="A"> > <rdfs:subClassOf> > <owl:Restriction> > <owl:hasValue> > <owl:Thing rdf:ID="w"/> > </owl:hasValue> > <owl:onProperty> > <owl:ObjectProperty rdf:ID="pA"/> > </owl:onProperty> > </owl:Restriction> > </rdfs:subClassOf> > <rdfs:subClassOf> > <owl:Class rdf:ID="AA"/> > </rdfs:subClassOf> > </owl:Class> > <owl:Class rdf:about="#AA"> > <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/ > owl#Thing"/> > </owl:Class> > <owl:Class rdf:ID="B"> > <rdfs:subClassOf> > <owl:Restriction> > <owl:hasValue rdf:resource="#w"/> > <owl:onProperty> > <owl:ObjectProperty rdf:ID="pB"/> > </owl:onProperty> > </owl:Restriction> > </rdfs:subClassOf> > <rdfs:subClassOf> > <owl:Class rdf:ID="BB"/> > </rdfs:subClassOf> > </owl:Class> > <owl:Class rdf:about="#BB"> > <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/ > owl#Thing"/> > </owl:Class> > <owl:ObjectProperty rdf:ID="pAXB"> > <rdfs:range rdf:resource="#B"/> > <rdfs:domain rdf:resource="#A"/> > </owl:ObjectProperty> > <owl:ObjectProperty rdf:ID="inv_pB"> > <owl:inverseOf rdf:resource="#pB"/> > </owl:ObjectProperty> > <BB rdf:ID="bNOT"/> > <A rdf:ID="a2"/> > <A rdf:ID="a1"/> > <B rdf:ID="b1"/> > <AA rdf:ID="aNOT"/> > <rdf:List> > <rdfs:subPropertyOf rdf:resource="#pAXB"/> > <rdf:rest rdf:parseType="Collection"> > <owl:ObjectProperty rdf:about="#inv_pB"/> > </rdf:rest> > <rdf:first rdf:resource="#pA"/> > </rdf:List> > <B rdf:ID="b2"/> > </rdf:RDF> > > <!-- Created with TopBraid Composer --> > > > ===== Demo code in Java, using Jena and Pellet (>=1.5) =============== > > import org.mindswap.pellet.jena.PelletReasonerFactory; > import com.hp.hpl.jena.ontology.OntModel; > import com.hp.hpl.jena.rdf.model.ModelFactory; > import com.hp.hpl.jena.rdf.model.ResourceFactory; > import com.hp.hpl.jena.vocabulary.OWL; > import com.hp.hpl.jena.vocabulary.RDF; > > import java.io.FileInputStream; > > /** > * Demo code for the "crossproduct" ontology: checks if pAXB = A X B. > * @author Michael Schneider (m_schnei@gmx.de) > */ > public class Owl11CrossProductDemo { > public static void main(String[] args) { > String ONT_FILENAME = "crossproduct.owl"; // put in project- > toplevel > String BASE_URI = "http://example.org/crossproduct.owl"; > try { > OntModel ontModel = > ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC); > ontModel.read(new FileInputStream(ONT_FILENAME), > BASE_URI); > > // check that all allowed tuples ARE in pAXB > { > String[][] allowedTuples = { > {"a1", "b1"}, > {"a1", "b2"}, > {"a2", "b1"}, > {"a2", "b2"}, > }; > System.out.println("*** allowed tuples MUST occur > in pAXB > ***"); > for (String[] tuple : allowedTuples) { > System.out.println("Exists tuple > ("+tuple[0]+","+tuple[1]+")? " + > ontModel.contains( > > ResourceFactory.createResource(BASE_URI+"#"+tuple[0]), > ResourceFactory.createProperty > (BASE_URI, > "#pAXB"), > > ResourceFactory.createResource(BASE_URI+"#"+tuple[1]) > ) > ); > } > } > > // check that unallowed triples are NOT in pAXB > { > String[][] unAllowedTuples = { > {"aNOT", "b1"}, > {"aNOT", "b2"}, > {"a1", "bNOT"}, > {"a2", "bNOT"}, > {"aNOT", "bNOT"}, > }; > System.out.println("*** un-allowed tuples must NOT > occur in > pAXB ***"); > for (String[] tuple : unAllowedTuples) { > System.out.println("Exists tuple > ("+tuple[0]+","+tuple[1]+")? " + > ontModel.contains( > > ResourceFactory.createResource(BASE_URI+"#"+tuple[0]), > ResourceFactory.createProperty > (BASE_URI, > "#pAXB"), > > ResourceFactory.createResource(BASE_URI+"#"+tuple[1]) > ) > ); > } > } > > } catch (Throwable e) { > e.printStackTrace(); > } > } > } > > ======================================= > > -- > Dipl.-Inform. Michael Schneider > FZI Forschungszentrum Informatik Karlsruhe > Abtl. Information Process Engineering (IPE) > Tel : +49-721-9654-726 > Fax : +49-721-9654-727 > Email: Michael.Schneider@fzi.de > Web : http://www.fzi.de/ipe/eng/mitarbeiter.php?id=555 > > FZI Forschungszentrum Informatik an der Universität Karlsruhe > Haid-und-Neu-Str. 10-14, D-76131 Karlsruhe > Tel.: +49-721-9654-0, Fax: +49-721-9654-959 > Stiftung des bürgerlichen Rechts > Az: 14-0563.1 Regierungspräsidium Karlsruhe > Vorstand: Rüdiger Dillmann, Michael Flor, Jivka Ovtcharova, Rudi > Studer > Vorsitzender des Kuratoriums: Ministerialdirigent Günther Leßnerkraus > Ulrike Sattler sattler@cs.man.ac.uk http://www.cs.man.ac.uk/~sattler/
Received on Friday, 12 October 2007 13:03:16 UTC