Search Mailing List Archives
[protege-discussion] Unable to use OWLObjectExactCardinalityRestriction
Tania Tudorache
tudorache at stanford.edu
Thu Oct 18 11:59:21 PDT 2007
Victor,
Please post your question on the Protege 4 feedback mailing list [1].
Thanks,
Tania
[1]: http://protege.stanford.edu/community/lists.html
Victor Silva wrote:
> Well I'm not sure if this is the exact list to ask but I'm quite sure
> you can help me on this one.
> I was trying the tutorial and I decided to modify the class hierarchy
> example to modelate a family but I'm having problems to set up the
> relations among the members.
> The problem is I believe in the bold lines I don't want to use
> SomeObjectRestriction what I do need, at least I think so, is
> getOWLObjectExactCardinalityRestriction which the cardinality set to
> 1. But this doesn't not compile here.
> I tried
> OWLDescription hasOneFather
> =factory.getOWLObjectExactCardinalityRestriction(hasFather,1,clsSon);
> But I get as error
> Exception in thread "main" java.lang.IllegalArgumentException
> at java.net.URI.create(URI.java:842)
> at owl.Family.main(Family.java:44)
> Caused by: java.net.URISyntaxException: Illegal character in fragment
> at index 48: http://www.co-ode.org/ontologies/testont.owl#Son#hasFather
> at java.net.URI$Parser.fail(URI.java:2809)
> at java.net.URI$Parser.checkChars(URI.java:2982)
> at java.net.URI$Parser.parse(URI.java:3028)
> at java.net.URI.<init>(URI.java:578)
> at java.net.URI.create(URI.java:840)
> ... 1 more
> Java Result: 1
>
> My source is:
> import org.semanticweb.owl.model.*;
> import org.semanticweb.owl.util.SimpleURIMapper;
> import org.semanticweb.owl.apibinding.OWLManager;
> import org.semanticweb.owl.util.*;
>
> import java.net.URI;
> import java.util.Set;
>
>
> public class Family {
>
> public static void main(String[] args) {
> try {
> // We first need to obtain a copy of an
> OWLOntologyManager, which, as the
> // name suggests, manages a set of ontologies. An
> ontology is unique within
> // an ontology manager. To load multiple copies of an
> ontology, multiple managers
> // would have to be used.
> OWLOntologyManager manager =
> OWLManager.createOWLOntologyManager();
>
>
> URI ontologyURI =
> URI.create("http://www.co-ode.org/ontologies/testont.owl");
> // Create a physical URI which can be resolved to point to
> where our ontology will be saved.
> URI physicalURI = URI.create("file:/tmp/MyOnt.owl");
> // Set up a mapping, which maps the ontology URI to the
> physical URI
> SimpleURIMapper mapper = new SimpleURIMapper(ontologyURI,
> physicalURI);
> manager.addURIMapper(mapper);
>
> // Now create the ontology - we use the ontology URI (not
> the physical URI)
> OWLOntology ontology = manager.createOntology(ontologyURI);
>
> OWLDataFactory factory = manager.getOWLDataFactory();
> // Get hold of references to class SOn and class Father.
> Note that the ontology does not
> // contain class A or classB, we simply get references to
> objects from a data factory that represent
> // class Son and class Father
> OWLClass clsSon =
> factory.getOWLClass(URI.create(ontologyURI + "#Son"));
> OWLClass clsFather =
> factory.getOWLClass(URI.create(ontologyURI + "#Father"));
> OWLClass clsMother =
> factory.getOWLClass(URI.create(ontologyURI + "#Mother"));
> // Now create the axiom
> OWLAxiom axiom = factory.getOWLSubClassAxiom(clsSon,
> clsFather);
>
> //Stating that each person must have a father and a mother
> OWLObjectProperty hasFather =
> factory.getOWLObjectProperty(URI.create(clsSon.getURI() + "#hasFather"));
> OWLObjectProperty hasMother =
> factory.getOWLObjectProperty(URI.create(clsSon.getURI() + "#hasMother"));
> *
> OWLDescription hasOneFather =
> factory.getOWLObjectSomeRestriction(hasFather,clsSon);
> OWLDescription hasOneMother =
> factory.getOWLObjectSomeRestriction(hasMother,clsSon);
> *
> // We now add the axiom to the ontology, so that the
> ontology states that
> // Son is a subclass of Father. To do this we create an
> AddAxiom change object.
> OWLSubClassAxiom restrictionFather =
> factory.getOWLSubClassAxiom(clsSon, hasOneFather);
> OWLSubClassAxiom restrictionMother =
> factory.getOWLSubClassAxiom(clsSon, hasOneMother);
>
> AddAxiom addAxiom = new AddAxiom(ontology, axiom);
> // We now use the manager to apply the change
> manager.applyChange(addAxiom);
>
>
> axiom = factory.getOWLSubClassAxiom(clsSon, clsMother);
> addAxiom = new AddAxiom(ontology, axiom);
> manager.applyChange(addAxiom);
>
>
> // The ontology will now contain references to class Son
> and class Father - let's
> // print them out
> for(OWLClass cls : ontology.getReferencedClasses()) {
> System.out.println("Referenced class: " + cls);
> }
> // We should also find that Father and Mother are a
> superclasses of son
> Set<OWLDescription> superClasses =
> clsSon.getSuperClasses(ontology);
> System.out.println("Superclasses of " + clsSon + ":");
> for(OWLDescription desc : superClasses) {
> System.out.println(desc);
> }
>
> // Now save the ontology. The ontology will be saved to
> the location where
> // we loaded it fromé, in the default ontology format
> manager.saveOntology(ontology);
>
> }
> catch (OWLException e) {
> e.printStackTrace();
> }
> }
>
>
> Thanks a lot for the patience and sorry if I posted to the wrong list,
> Victor
> ------------------------------------------------------------------------
>
> _______________________________________________
> protege-discussion mailing list
> protege-discussion at lists.stanford.edu
> https://mailman.stanford.edu/mailman/listinfo/protege-discussion
>
> Instructions for unsubscribing: http://protege.stanford.edu/doc/faq.html#01a.03
>
More information about the protege-discussion
mailing list