Онтология загрузки, сериализованная в Turtle с использованием OWL API - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь загрузить онтологию из модели Jena, используя OWL API, но большинство аксиом появляются в виде аннотаций.

Онтология в Turtle показана ниже.Я использую модель Джены, чтобы сохранить это. Примечание: приведенная ниже онтология неверна, как упомянуто в ответах вниз

@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

<http://example.com/minimalDecoupling>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "minimal decoupling" .

<http://example.com/frequency>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "frequency" .

<http://example.com/voltage>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "Voltage" .

<http://example.com/powerConsumed>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "power consumed" .

<http://example.com/installation>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "installation" .

<http://example.com/Device>
        a           "http://www.w3.org/2002/07/owl#Class" ;
        rdfs:label  "device" .

<http://example.com/dimension>
        a           "http://www.w3.org/2002/07/owl#DatatypeProperty" ;
        rdfs:label  "dimension" .

<http://example.com/>
        a       "http://www.w3.org/2002/07/owl#Ontology" .

Предположим, что вышеуказанная онтология хранится в модели Jena ontologyGraph, я использую код нижезагрузить модель Jena как онтологию OWL.

OWLOntology ontology = ontologyManager.
                loadOntologyFromOntologyDocument
                        (new ByteArrayInputStream(Ontology.toTurtle(ontologyGraph).getBytes()));

Метод toTurtle показан ниже:

public static String toTurtle(Model ontologyGraph){
        StringWriter out = new StringWriter();
        ontologyGraph.write(out,"TTL");
        return out.toString();
    } 

Однако, как мы видим в приведенном ниже выводе, аксиомы изв онтологии появляются аксиомы аннотаций:

Онтология (OntologyID (Anonymous-2)) [Аксиомы: 15 логических аксиом: 0] Первые 20 аксиом: {AnnotationAssertion (rdfs: label http://example.com/powerConsumed)«потребляемая мощность») AnnotationAssertion (rdfs: label http://example.com/minimalDecoupling «минимальная развязка») AnnotationAssertion (rdf: type http://example.com/ "http://www.w3.org/2002/07/owl#Ontology") AnnotationAssertion (rdfs: label http://example.com/dimension«измерение») AnnotationAssertion (rdf: тип http://example.com/dimension "http://www.w3.org/2002/07/owl#DatatypeProperty") AnnotationAssertion (rdf: тип http://example.com/voltage" http://www.w3.org/2002/07/owl#DatatypeProperty") AnnotationAssertion (rdf: тип http://example.com/Device "http://www.w3.org/2002/07/owl#Class") AnnotationAssertion (rdfs: label http://example.com/installation" install ") AnnotationAssertion (rdfs: метка http://example.com/voltage «Напряжение») AnnotationAssertion (rdf: тип http://example.com/minimalDecoupling "http://www.w3.org/2002/07/owl#DatatypeProperty") AnnotationAssertion (rdf: type http://example.com/frequency" http://www.w3.org/2002/07/owl#DatatypeProperty") AnnotationAssertion(rdfs: метка http://example.com/Device «устройство») AnnotationAssertion (rdf: тип http://example.com/powerConsumed "http://www.w3.org/2002/07/owl#DatatypeProperty") AnnotationAssertion (rdfs: label http://example.com/frequency" частота ") AnnotationAssertion (rdf: type http://example.com/installation "http://www.w3.org/2002/07/owl#DatatypeProperty")}

Мои вопросы:

  1. Почему все аксиомы отображаются в виде аннотаций?
  2. Можно ли напрямую загрузить модель Jena как онтологию OWL, используя OWL API, без необходимости проходить через Turtle?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019
  • 1) как указано в другом ответе - предоставленная онтология неверна, вместо URI используются литералы.
  • 2) ONT-API - основанный на Jena имплик OWL-API-api.

Вы можете загрузить черепаху в менеджер, имея некоторые изменения из-за трансформаторов, или передать Graph как есть (с или без трансформаторов). В последнем случае для данного RDF были бы только AnnotationAssertion аксиомы. Если вы исправите свой RDF вручную, заменив литералы URI, ожидаются следующие аксиомы:

    Declaration(Class(<http://example.com/Device>))
    Declaration(DataProperty(<http://example.com/dimension>))
    Declaration(DataProperty(<http://example.com/installation>))
    Declaration(DataProperty(<http://example.com/powerConsumed>))
    Declaration(DataProperty(<http://example.com/voltage>))
    Declaration(DataProperty(<http://example.com/frequency>))
    Declaration(DataProperty(<http://example.com/minimalDecoupling>))
    AnnotationAssertion(rdfs:label <http://example.com/minimalDecoupling> "minimal decoupling"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/frequency> "frequency"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/voltage> "Voltage"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/powerConsumed> "power consumed"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/installation> "installation"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/Device> "device"^^xsd:string)
    AnnotationAssertion(rdfs:label <http://example.com/dimension> "dimension"^^xsd:string)

Также обратите внимание: есть еще одно представление данных RDF: OntGraphModel, рекомендуется использовать вместо OntModel, так как последнее не поддерживает OWL2

2 голосов
/ 02 апреля 2019

Почему все аксиомы появляются как аннотации?

Типы во входной модели - строковые литералы, но они должны быть IRI. Например этот:

<http://example.com/Device>
    a "http://www.w3.org/2002/07/owl#Class" ;

Должно быть:

<http://example.com/Device>
    a <http://www.w3.org/2002/07/owl#Class> ;

Что будет автоматически сокращено как:

<http://example.com/Device>
    a owl:Class ;

Онтология входной модели Jena создана с использованием Jena API? В этом случае код должен быть изменен для создания IRI (также известных как «Ресурсы» или «URIResources» в Йене) вместо строковых литералов.

Можно ли напрямую загрузить модель Jena как онтологию OWL с использованием API OWL без необходимости проходить через Turtle?

Невозможно напрямую загрузить модель Jena в OWL-API, но, безусловно, есть варианты, которые позволяют избежать обхода через Turtle, например ONT-API .

...