Почему валидатор Jena не выдает мне предупреждения?

В следующем коде 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());
      }
    }

person Ariel    schedule 25.02.2014    source источник
comment
Что не так с приданием familyName документу FOAF?   -  person Joshua Taylor    schedule 26.02.2014
comment
Этот предыдущий комментарий немного ироничен; для документа FOAF может быть нелогичным иметь фамилию, но есть ли у вас какая-то особая причина ожидать, что она должна быть логически непоследовательной?   -  person Joshua Taylor    schedule 26.02.2014


Ответы (1)


Данные экземпляра, которые вы создаете, таковы:

@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, как мы увидим, если напишем модель вывода. Предполагается, что 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 и foaf:Person.

Даже если вы используете алгоритм рассуждений OWL, вам все равно нужно указать на какую-то конкретную логическую несогласованность. Я не знаю, являются ли какие-либо из тех типов, которые имеет ex:Persona, непересекающимися, и если они не являются (или если рассудок не может сделать вывод, что они есть), вы не обнаружите несоответствия.

person Joshua Taylor    schedule 25.02.2014
comment
Что касается «foaf:family_name», это потому, что я использовал класс FOAF Jena. Должен ли я вручную вводить свойство foaf:familyName? - person Ariel; 26.02.2014
comment
Это не так важно; это просто артефакт класса FOAF в Йене, созданный из более старой версии словаря FOAF. Единственная причина, по которой я вообще это заметил, заключалась в том, что я просматривал текущую версию словаря, чтобы увидеть, нет ли здесь каких-либо очевидных аксиом, которые могли бы привести к несоответствию. - person Joshua Taylor; 26.02.2014