[英]How to set data type for OWL restriction using Apache Jena?
我正在使用 Apache Jena。 我已经创建了数据属性,它的范围为 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
使用本体的应用程序需要知道限制的数据类型。 您是否知道我需要在代码中更改什么才能在限制中获取数据类型(例如字符串)而不是文字?
谢谢,达科
正如所建议的那样,我在 Jena 邮件列表上提出了这个问题,并得到了一个答案,即 Jena 不支持定义了 DataRange 的 OWL 2。 这只是意味着没有方便的功能,但您仍然可以通过在 RDF 级别工作来实现所需的效果,这只是冗长的。 查看 OWL 2 规范以了解需要哪些 RDF 三元组来表示所需的 DataRange,然后使用通用模型 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);
谢谢,达科
您可以查看ONT-API项目。 有一个类比org.apache.jena.ontology.OntModel
- com.github.owlcs.ontapi.jena.model.OntModel
- 但适用于 OWL2 规范(原生 Jena 模式适用于 OWL1)。
示例:
String uri = "https://stackoverflow.com/questions/39926809";
String ns = uri + "#";
OntModel m = OntManagers.createONT().createGraphModel(uri)
.setNsPrefixes(OntModelFactory.STANDARD)
.setNsPrefix("test", ns);
OntDataProperty prop = m.createDataProperty(ns + "prop").addRange(XSD.xstring);
OntDataRange dt = prop.ranges().findFirst().orElseThrow(AssertionError::new);
m.createOntClass(ns + "clazz")
.addSuperClass(m.createDataMaxCardinality(prop, 1, dt));
m.write(System.out, "ttl");
输出:
@prefix test: <https://stackoverflow.com/questions/39926809#> .
@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#> .
<https://stackoverflow.com/questions/39926809>
a owl:Ontology .
test:prop a owl:DatatypeProperty ;
rdfs:range xsd:string .
test:clazz a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
owl:onDataRange xsd:string ;
owl:onProperty test:prop
] .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.