如何解决Jena 模型验证 OntModel
我创建了一个本体,我想用它来验证实例,以下是我的测试设置,无法获得验证报告,其中一个 uid 为零。这是 xsd:minexclusive "0"^^xsd:unsignedLong。
任何人都可以帮助我理解使用 Jena 的最佳实践,我打算起诉默认模型以接收验证 aginast ontModel 和 TDB 支持模型中的合并的输入。
:Book rdf:type owl:Class ;
rdfs:subClassOf Model .
和数据属性
:uid rdf:type owl:DatatypeProperty,owl:FunctionalProperty ;
rdfs:domain :Model ;
rdfs:range [ rdf:type rdfs:Datatype ;
owl:onDatatype xsd:unsignedLong ;
owl:withRestrictions ( [ xsd:minexclusive "0"^^xsd:unsignedLong
]
)
] .
尝试使用这个本体来验证数据
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF);
ontModel.read(getClass().getClassLoader().getResource("model.owl").toExternalForm(),NS);
// ontModel.write(System.out);
reasoner reasoner = ontModel.getreasoner().bindSchema(ontModel);
Model data = createTestData();
//data.write(System.out);
InfModel infModel = ModelFactory.createInfModel(reasoner,data);
ValidityReport report = infModel.validate();
if (report.isValid())
System.out.println("valid");
在下面的代码中//(index - 1)确保至少有一个id为0
public static Model createTestData() {
Model instances = ModelFactory.createDefaultModel();
instances.setnsprefix("rdfs",RDFS.getURI());
instances.setnsprefix("rdf",RDF.getURI());
instances.setnsprefix("a",NS);
instances.setnsprefix("",NS + "#");
Property UID_PROPERTY = ResourceFactory.createProperty(NS + "#uid");
IntStream.of(1,2,3).forEach(index -> {
Resource r = instances.createResource(NS + "/item/" + (index - 1));
r.addProperty(UID_PROPERTY,ResourceFactory.createTypedLiteral((index - 1)));
});
return instances;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。