我正在使用Apache Jena创建一个本体。但是,找不到以下示例中创建自定义数据类型的方法: '具有值'一些xsd:float [> = 0.0f,<= 15.0f]。
您有什么想法吗?
答案 0 :(得分:1)
似乎您需要的是DatatypeRestriction,它有两个方面的限制:xsd:minInclusive
和xsd: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");