Как создать пользовательские типы данных в Apache Jena? - PullRequest
0 голосов
/ 10 января 2019

Я создаю онтологию, используя Apache Jena. Однако я не могу найти способ создания пользовательских типов данных, как в следующем примере: 'имеет значение' some xsd: float [> = 0.0f, <= 15.0f]. </p>

У вас есть идеи?

1 Ответ

0 голосов
/ 10 января 2019

Похоже, вам нужно DatatypeRestriction с двумя ограничениями: xsd:minInclusive и xsd:maxInclusive. Это конструкции OWL2.

org.apache.jena.ontology.OntModel не поддерживает OWL2, только OWL1.1 частично (см. документация ), и, следовательно, нет встроенных методов для создания таких диапазонов данных (есть только DataOneOf данные выражение диапазона, см. OntModel#createDataRange(RDFList)).

Таким образом, вы должны создать нужный тип данных вручную, трижды за тройкой, используя общий интерфейс org.apache.jena.rdf.model.Model. В RDF это будет выглядеть так:

_:x rdf:type rdfs:Datatype.
_:x owl:onDatatype DN.
_:x owl:withRestrictions (_:x1 ... _:xn).

См. Также owl2-краткое руководство .

Или, чтобы построить такую ​​онтологию, вы можете использовать некоторые внешние утилиты или API. Например, в ONT-API следующий фрагмент

    String ns = "https://stackoverflow.com/questions/54131709#";
    OntGraphModel m = OntModelFactory.createModel()
            .setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
    OntDT floatDT = m.getOntEntity(OntDT.class, XSD.xfloat);
    OntFR min = m.createFacetRestriction(OntFR.MinInclusive.class, floatDT.createLiteral("0.0"));
    OntFR max = m.createFacetRestriction(OntFR.MaxInclusive.class, floatDT.createLiteral("15.0"));
    OntDT myDT = m.createOntEntity(OntDT.class, ns + "MyDatatype");
    myDT.addEquivalentClass(m.createRestrictionDataRange(floatDT, Arrays.asList(min, max)));
    m.createResource().addProperty(m.createOntEntity(OntNDP.class, ns + "someProperty"), 
            myDT.createLiteral("2.2"));
    m.write(System.out, "ttl");

создаст следующую онтологию:

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

[ q:someProperty  "2.2"^^q:MyDatatype ] .

q:MyDatatype  a              rdfs:Datatype ;
        owl:equivalentClass  [ a                     rdfs:Datatype ;
                               owl:onDatatype        xsd:float ;
                               owl:withRestrictions  ( [ xsd:minInclusive  "0.0"^^xsd:float ]
                                                       [ xsd:maxInclusive  "15.0"^^xsd:float ]
                                                     )
                             ] .

q:someProperty  a  owl:DatatypeProperty .
...