我正在使用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?
谢谢, 达科
答案 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);
谢谢, 达科