Как считывать определенные значения из OWL Ontology, используя Java - PullRequest
1 голос
/ 14 августа 2010

У меня есть 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="#Datenbanken"/>
  </docent>
  <module rdf:ID="Softwaretechnik"/>
  <docent rdf:ID="Wayne_Smith">
    <responsiblefor rdf:resource="#Softwaretechnik"/>
  </docent>
</rdf:RDF>

Теперь я использую Java API для запроса онтологии.Например, если у меня Wayne_Smith, как я могу запросить модуль, за который он отвечает?

Ответы [ 3 ]

1 голос
/ 01 апреля 2013

Если я правильно понял ваш вопрос и 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);
1 голос
/ 31 августа 2010

Уэйн, какой именно API вы используете?Если это Manchester owl api, вы найдете несколько примеров кода в их документации здесь , которые должны помочь вам решить эту проблему.

0 голосов
/ 03 апреля 2013

Другой способ: запрос SPARQL может использоваться для запроса онтологии, чтобы получить модуль, за который отвечает Wayne_Smith.И есть библиотеки Java SPARQL (например, Apache Jena ARQ).Надеюсь, это поможет.

...