我有一个OWL本体论:
<?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="#Datenbanken"/>
</docent>
<module rdf:ID="Softwaretechnik"/>
<docent rdf:ID="Wayne_Smith">
<responsiblefor rdf:resource="#Softwaretechnik"/>
</docent>
</rdf:RDF>
现在我使用Java API查询本体。例如,如果我有Wayne_Smith
,我该如何查询他负责的模块?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果我正确地理解了您的问题并且您所指的Java API是OWL API,那么这应该可以解决问题:
/*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);
答案 2 :(得分:0)
另一种方式:SPARQL查询可用于查询本体以获取Wayne_Smith负责的模块。还有Java SPARQL库(例如:Apache Jena ARQ)。希望这会有所帮助。