如何在 Apache Jena 中创建用户定义的数据类型?

How to create user defined datatypes in Apache Jena?

我正在使用 Apache Jena 创建 ontology。但是,我找不到创建自定义数据类型的方法,如下例所示: 'has value' 一些 xsd:float[>= 0.0f , <= 15.0f]。

你有什么想法吗?

看来您需要的是 DatatypeRestriction,有两个方面限制:xsd:minInclusivexsd:maxInclusive。 它是 OWL2 结构。

org.apache.jena.ontology.OntModel 不支持 OWL2,仅部分支持 OWL1.1(参见 documentation),因此,没有用于创建此类数据范围的内置方法(只有 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-quick-guide

或者,要构建这样一个 ontology,您可以使用一些外部实用程序或 API。 例如,在 ONT-API (v. 2.x.x) 中,以下代码段

    String ns = "";
    OntModel m = OntModelFactory.createModel()
            .setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
    OntDataRange.Named floatDT = m.getDatatype(XSD.xfloat);
    OntFacetRestriction min = m.createFacetRestriction(OntFacetRestriction.MinInclusive.class,
            floatDT.createLiteral("0.0"));
    OntFacetRestriction max = m.createFacetRestriction(OntFacetRestriction.MaxInclusive.class,
            floatDT.createLiteral("15.0"));
    OntDataRange.Named myDT = m.createDatatype(ns + "MyDatatype");
    myDT.addEquivalentClass(m.createDataRestriction(floatDT, min, max));
    m.createResource().addProperty(m.createDataProperty(ns + "someProperty"),
            myDT.createLiteral("2.2"));
    m.write(System.out, "ttl");

将产生以下 ontology:

@prefix q:     <> .
@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 .