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

时间:2019-01-10 15:16:09

标签: jena user-defined-data-types

我正在使用Apache Jena创建一个本体。但是,找不到以下示例中创建自定义数据类型的方法:      '具有值'一些xsd:float [> = 0.0f,<= 15.0f]。

您有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

org.apache.jena.ontology.OntModel不支持OWL2,仅部分支持OWL1.1(请参阅documentation),因此,不存在用于创建此类数据范围的内置方法(只有{{1} }数据范围表达式,请参见DataOneOf)。

因此,您必须使用常规的OntModel#createDataRange(RDFList)界面手动创建所需的数据类型,三倍地增加三倍。 在RDF中,它看起来像这样:

org.apache.jena.rdf.model.Model

另请参阅owl2-quick-guide

或者,要构建这样的本体,可以使用一些外部实用程序或API。 例如,在ONT-API中的以下代码段

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

将产生以下本体:

    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");
相关问题