Хороший вопрос. Причина, по которой вам нужно указать эти типы, связана с отображением графов RDF в онтологии OWL (2). В онтологии OWL 2 все сущности должны быть явно типизированы как класс, свойство объекта, свойство типа данных, свойство аннотации, тип данных или онтология. Чтобы убедиться, что это ограничение учтено во всех RDF-сериализациях онтологии OWL, необходимо явно ввести все ресурсы, введенные онтологией, включая эти пустые узлы, связанные с ограничениями, пересечениями и т. д.
При этом во многих случаях явная типизация не очень полезна, потому что тип можно вывести из других троек. Например:
:myClass owl:intersectionOf ( owl:Thing ) .
требует, чтобы :myClass
было owl:Class
. Рассмотрим пример, который вы приводите:
:myClass owl:equivalentClass
[owl:intersectionOf (
[ owl:onProperty :hasProp ; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp ; owl:someValuesFrom :SomeOtherClass ] )
] .
С одной стороны, :myClass
должен быть классом из-за owl:equivalentClass
; два пустых узла внутри списка обязательно owl:Restriction
из-за использования предиката owl:onProperty
; это означает, что пустой узел с атрибутом owl:intersectionOf
обязательно является классом.
С другой стороны, неясно, является ли :SomeOtherClass
классом или типом данных, потому что неизвестно, является ли :hasProp
свойством объекта или свойством типа данных. Итак, здесь у вас есть ситуация, имеет ли значение явный ввод.
Теперь реальный вопрос может заключаться в следующем: «Мне действительно нужно явно применять эти типы на практике?» Я бы сказал, это зависит от инструментов, которые вы используете. Большинство процессоров OWL будут интерпретировать многие несовместимые графы RDF как допустимые онтологии OWL, но вы должны быть осторожны, так как могут произойти неожиданности. Например, я попытался открыть в Protégé файл, содержащий пример, который вы приводите. Protégé не удалось интерпретировать содержимое как определяющее какой-либо класс или свойство. Однако проблема была не из-за отсутствия owl:Restriction
или owl:Class
для пустых узлов. Если бы я просто добавил явный тип для :myClass
, то Protégé интерпретировал содержимое как определяющее два класса, свойство объекта и аксиому о :myClass
. Сравнивать:
# This does not work in Protégé 4.3
@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:myClass owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
а также:
# This works in Protégé 4.3
@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:myClass a owl:Class;
owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
Что удивительно, так это то, что Protégé решил интерпретировать :hasProp
как свойство объекта, в то время как это могло быть свойством типа данных.
Наконец, чтобы завершить этот ответ, я заметил, что если вы полностью откажетесь от типа owl:Restriction
, онтологии в RDF по-прежнему будут распознаваться как допустимые онтологии OWL 2 DL валидатор Manchester OWL 2. Попробуйте это как вход:
@prefix : <http://ex.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:SomeOtherClass a owl:Class .
:hasProp a owl:ObjectProperty .
:myClass a owl:Class;
owl:equivalentClass [
owl:intersectionOf (
[ owl:onProperty :hasProp; owl:allValuesFrom :SomeOtherClass ]
[ owl:onProperty :hasProp; owl:someValuesFrom :SomeOtherClass ]
)
] .
Редактировать: я только что проверил спецификацию OWL 2, и оказалось, что график RDF выше следует классифицировать как документ онтологии OWL 2 DL. Однако в этом конкретном примере нет никакой двусмысленности в отношении типов сущностей.
person
Antoine Zimmermann
schedule
22.02.2014