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 (将#修改为@)