问题描述
我创建了一个本体,我想用它来验证实例,以下是我的测试设置,无法获得验证报告,其中一个 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 (将#修改为@)