Jena验证器为什么不给我警告?

时间:2014-02-25 16:53:45

标签: jena semantic-web owl rdfs foaf

在以下代码中,ValidityReport始终有效;没有检测到不一致。我希望它能给我一个警告,因为我给FOAF文件一个姓氏。为什么没有检测到不一致?

    Model model = ModelFactory.createDefaultModel();
    OntModel m = ModelFactory.createOntologyModel();
    m.read(FOAF.NS);
    Resource persona = model.createResource("http://www.example.org/rdf#Persona", FOAF.Document);
    persona.addProperty(FOAF.family_name, "18", XSDDatatype.XSDint);
    InfModel infModel = ModelFactory.createRDFSModel(m, model);
    ValidityReport validity = infModel.validate();
    if (validity.isValid()) {
      System.out.println("Valid!");
    } else {
      System.out.println("Conflicts");
      for (Iterator<Report> in = validity.getReports(); in.hasNext();) {
        System.out.println(" - " + in.next());
      }
    }

1 个答案:

答案 0 :(得分:2)

您正在创建的实例数据是:

@prefix ex:    <http://www.example.org/rdf#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .

ex:Persona  a             foaf:Document ;
        foaf:family_name  "18"^^xsd:int .

foaf:Document类型的资源,xsd:int属性的值为foaf:family_name

您的推理模型使用RDFS推理器。 foaf:family_name的域名(顺便说一句,被描述为foaf:familyName的古老拼写)是foaf:Person,因此ex:Persona可以推断为foaf:Person 1}},正如我们所看到的那样,我们是否编写了推理模型。还推断出ex:Persona还有许多其他类型:

ex:Persona  a             foaf:Document , foaf:Person , <http://www.w3.org/2000/01/rdf-schema#Resource> , <http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing> , foaf:Agent ;
        foaf:family_name  "18"^^xsd:int .

在RDFS模型中存在不一致性是相当困难的,因为你无法真正说出很多。例如,你不能声明不相交的类,所以在foaf:Document a foaf:Person之间没有矛盾。

即使您使用OWL推理器,您仍然需要查明某些特定的逻辑不一致性。我不知道ex:Persona中有哪些类型是不相交的,如果它们不是(或者如果推理器不能推断它们是这样),那么你就不会发现不一致。