Как рекомендуется добавлять людей с помощью SPARQL UPDATE?

Я знаю, что добавить индивидуума (экземпляр класса) в тройное хранилище можно с помощью следующего оператора вставки:

PREFIX indv:<http://someexample.com/blah>
PREFIX ont:<http://someotherexample.com/blah/ontology#>
INSERT DATA
{
indv:individual_name rdf:type ont:SomeClassName.
}

У меня вопрос: этого достаточно?

Я спрашиваю об этом, потому что я добавил несколько человек в файл owl с помощью protege и увидел, что в файл добавлена ​​​​еще одна тройка:

indv:individual_name rdf:type owl:NamedIndividual.

Эту тройку надо вставлять и в магазин тройки? Каковы преимущества вставки этой тройки или есть какие-то недостатки?


person whitefang1993    schedule 06.07.2015    source источник


Ответы (1)


У меня вопрос: этого достаточно?

Достаточно просто добавить экземпляр класса в RDF. В RDF ресурсы могут быть членами классов, и это представлено тройкой со свойством rdf:type.

Я спрашиваю об этом, потому что я добавил несколько человек в файл owl с помощью protege и увидел, что в файл добавлена ​​​​еще одна тройка:

indv:individual_name rdf:type owl:NamedIndividual.

Эту тройку надо вставлять и в магазин тройки? Каковы преимущества вставки этой тройки или есть какие-то недостатки?

OWL более структурирован, чем RDF. OWL на самом деле является логическим языком, основанным на аксиомах и утверждениях. Он по-прежнему использует IRI в качестве идентификаторов, и разработчики позаботились о поддержке сериализации онтологий OWL в RDF. Итак, вы фактически работаете с сериализацией онтологии OWL в RDF. В общем, вы можете найти официальный документ, Язык веб-онтологий OWL 2 Сопоставление с графиками RDF, полезно.

То, что вы видите в выводе Protege, на самом деле представляет собой сериализацию двух аксиом OWL. В OWL вы можете объявить индивидуума без указания каких-либо классов, членом которых он является. Вы делаете это с помощью аксиомы вроде (копирование из документации, указанной выше):

Декларация( NamedIndividual( *:a ))

Это переводится в RDF как тройка:

T(*:a) rdf:type owl:NamedIndividual .

Обозначение T(*:a) просто означает, что каким бы ни был перевод *:a, это предмет тройки. Таким образом, тройка «x rdf:type owl:NamedIndividual» — это то, что на самом деле отвечает за утверждение, что «x — это физическое лицо». То есть, чтобы объявить, что что-то является физическим лицом, вы должны просто сделать:

INSERT DATA { indv:individual_name rdf:type owl:NamedIndivual }

А как насчет добавления еще одного типа (как в оригинальном обновлении SPARQL)? В OWL вы говорите, что «a» является членом некоторого класса, обозначаемого выражением класса «CE», с помощью этой аксиомы:

Утверждение класса (CE a)

Это переведено в RDF как

T(a) rdf:тип T(CE) .

Обозначения T(a) и T(CE) просто указывают на то, что представление «a» и «CE» в RDF может быть более сложным, чем простой IRI, пустой узел или литерал. Например, выражением класса может быть unionOf, crossOf и т. д. Итак, если вы хотите добавить аксиому утверждения класса, вы должны использовать обновление SPARQL, например:

INSERT DATA {
  indv:individual_name rdf:type ont:SomeClassName.
}

Конечно, вы должны делать это только в том случае, если вы действительно объявили человека (хотя вы обнаружите, что на практике это не всегда выполняется). Итак, в целом, вы, вероятно, хотите такое обновление:

INSERT DATA {
  indv:individual_name rdf:type ont:SomeClassName, owl:NamedIndividual
}

Это (i) объявляет человека и (ii) утверждает, что человек является членом определенного класса.

person Joshua Taylor    schedule 07.07.2015