1

我有一个 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,例如,我如何查询他负责的模块?

4

3 回答 3

1

韦恩,您使用的是哪个 API?如果是 Manchester owl api,你会在他们的文档中找到一些代码示例,应该可以帮助你解决这个问题。

于 2010-08-31T13:54:38.970 回答
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);
于 2013-04-01T13:23:21.750 回答
0

另一种方式:可以使用 SPARQL 查询查询本体以获取 Wayne_Smith 负责的模块。还有 Java SPARQL 库(例如:Apache Jena ARQ)。希望这可以帮助。

于 2013-04-03T09:36:29.623 回答