如何使用Apache Jena为OWL限制设置数据类型?

时间:2016-10-07 22:54:15

标签: java jena owl restriction apache-jena

我正在使用Apache Jena。我已经创建了data属性,它的范围为xsd:string和作为超类添加到特定(已创建)类的限制:

DatatypeProperty dataProperty = model.createDatatypeProperty(baseURI + possibleProperty);
dataProperty.setRange(XSD.xstring);
MaxCardinalityRestriction restriction = model.createMaxCardinalityRestriction(null, dataProperty, 1);
itemClass.addSuperClass(restriction);

当我在Protege中打开生成的本体时,所提到的限制如下:

DataProperty_Name max 1 Literal

我的目标是使用包含的数据类型(在数据属性范围内指定)来获取它,例如我期待着:

DataProperty_Name max 1 string

使用本体的应用程序需要知道限制的数据类型。您是否知道我需要在代码中更改以获取限制中的数据类型(例如字符串)而不是Literal?

谢谢, 达科

1 个答案:

答案 0 :(得分:0)

正如所建议的那样,我已经在Jena邮件列表上提出了问题并得到了一个答案,即Jena不支持定义DataRange的OWL 2。 这只是意味着没有便利功能,但你仍然可以通过在RDF级别工作来达到预期的效果,它只是冗长。查看OWL 2规范以查看表示所需DataRange所需的RDF三元组,然后使用通用Model API来声明这些三元组。

我遵循了这个建议并成功用以下代码解决了我的问题:

MaxCardinalityRestriction restriction = model.createMaxCardinalityRestriction(null, existingDataProperty, 1);                                               
restriction.removeAll(OWL.cardinality);
restriction.addLiteral(OWL2.maxQualifiedCardinality, 1);
restriction.addProperty(OWL2.onDataRange, XSD.xstring);
itemClass.addSuperClass(restriction); 

谢谢, 达科