How to read out specific values from an OWL Ontology using Java
I've got an OWL Ontology:
<?xml version="1.0"?>
<rdf:RDF
xmlns="http://www.owl-ontologies.com/Ontology1272923485.owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xml:base="http://www.owl-ontologies.com/Ontology1272923485.owl">
<owl:Ontology rdf:about=""/>
<owl:Class rdf:ID="studypath">
<owl:disjointWith>
<owl:Class rdf:ID="module"/>
</owl:disjointWith>
<owl:disjointWith>
<owl:Class rdf:ID="docent"/>
</owl:disjointWith>
</owl:Class>
<owl:Class rdf:about="#docent">
<owl:disjointWith>
<owl:Class rdf:about="#module"/>
</owl:disjointWith>
<owl:disjointWith rdf:resource="#studypath"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>1</owl:minCardinality>
<owl:valuesFrom>
<owl:Class rdf:about="#module"/>
</owl:valuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="responsiblefor"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</owl:Class>
<owl:Class rdf:about="#module">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="predecessor_module"/>
</owl:onProperty>
<owl:someValuesFrom rdf:resource="#module"/>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#module"/>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="folgemodule"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>1</owl:minCardinality>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="offeredfor"/>
</owl:onProperty>
<owl:valuesFrom rdf:resource="#studypath"/>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:disjointWith rdf:resource="#docent"/>
<owl:disjointWith rdf:resource="#studypath"/>
</owl:Class>
<owl:ObjectProperty rdf:about="#predecessor_module">
<rdfs:range rdf:resource="#module"/>
<rdfs:domain rdf:resource="#module"/>
<owl:inverseOf>
<owl:ObjectProperty rdf:about="#folgemodule"/>
</owl:inverseOf>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="#folgemodule">
<owl:inverseOf rdf:resource="#predecessor_module"/>
<rdfs:range rdf:resource="#module"/>
<rdfs:domain rdf:resource="#module"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="#offeredfor">
<rdfs:range rdf:resource="#studypath"/>
<rdfs:domain rdf:resource="#module"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="#responsiblefor">
<rdfs:domain rdf:resource="#docent"/>
<rdfs:range rdf:resource="#module"/>
</owl:ObjectProperty>
<module rdf:ID="Datenbanken">
<offeredfor>
<studypath rdf:ID="WIN"/>
</offeredfor>
</module>
<docent rdf:ID="John_Smith">
<responsiblefor rdf:resource="#Datenb开发者_JAVA技巧anken"/>
</docent>
<module rdf:ID="Softwaretechnik"/>
<docent rdf:ID="Wayne_Smith">
<responsiblefor rdf:resource="#Softwaretechnik"/>
</docent>
</rdf:RDF>
Now I am using Java API for querying the ontology. If I have Wayne_Smith
, for example, how can I query for the module he is responsible for?
Wayne, precisely which api are you using? If it is the Manchester owl api, you'll find some code examples in their documentation here, which should help you to solve that problem.
If I understood your question correctly and the Java API you're referring to is the OWL API, this should do the trick:
/*Load your ontology from a local file and do the initialisations*/
File inputfile = new File("ontologyPath");
OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); ;
OWLDataFactory dataFactory = manager.getOWLDataFactory();
OWLOntology yourOntology = manager.loadOntologyFromOntologyDocument(inputfile);
IRI ontologyIRI = yourOntology.getOntologyID().getOntologyIRI();
/*Get the object property and the individual you're interested in*/
OWLObjectProperty o_p_responsible_for = dataFactory.getOWLObjectProperty(IRI.create(ontologyIRI + "#"+"Responsiblefor"));
OWLIndividual ind_Wayne = dataFactory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#"+"Wayne_Smith"));
/*return the value*/
Set<OWLIndividual> responsibilities_of_Wayne= ind_Wayne.getObjectPropertyValues(o_p_responsible_for, yourOntology);
Another way: a SPARQL query can used to query the ontology to get the module for which Wayne_Smith is responsible. And there are Java SPARQL libraries (eg: Apache Jena ARQ). Hope this helps.
精彩评论