У нас есть онтология OWL, которая содержит свойства, которые предназначены для использования исключительно в ограничениях OWL someValuesFrom (у нас нет уровня экземпляра), например, следующие (синтаксис RDF Turtle):
:isResponsibleFor a owl:ObjectProperty;
rdfs:domain :Role;
rdfs:range :Task.
:SystemAdministrator rdfs:subClassOf :Role;
rdfs:subClassOf
[ a owl:Restriction ;
owl:onProperty :isResponsibleFor ;
owl:someValuesFrom :ServerAdministration].
Хотя ограничения OWL могут быть хорошими в синтаксисе функционального стиля или в Protégé, они вызывают широкий спектр проблем для нашего набора инструментов на основе RDF, таких как:
- Преобразование между различными форматами или загрузка и сохранениев инструментах на основе RDF делает вывод нечитаемым или трудным для обработки из-за неорганизованных операторов blanknode, это также влияет на управление версиями.
- Визуализация на основе графиков показывает большое количество ненужных узлов, которые необходимо отфильтровать и преобразовать впрямые края.
- Редактирование сбивает с толку, особенно для редакторов, которые не знают об этой проблеме.
Из-за этих проблем мы хотели бы смоделировать эти утверждения просто так:
:SystemAdministrator :isResponsibleFor :ServerAdministration.
Мы не используем рассуждения, поэтому с OW проблем нетL профили, ограничивающие выражения классов, но это все еще семантически неправильно.Также возможно, что кто-то на самом деле добавит слой экземпляра в будущем, поэтому мы хотели бы найти компромисс.Можно ли как-то смоделировать семантику ограничения в самом свойстве или его выводе?Это определение может быть грязным, так как оно должно быть определено только один раз, в то время как у нас есть несколько тысяч ограничений.
Например, может быть свойство: isResponsibleForSome:
:isResponsibleForSome a owl:ObjectProperty;
rdfs:domain [rdfs:subClassOf :Role];
rdfs:range [rdfs:subClassOf :Task].
И всякий раз, когдамежду двумя классами C и D есть оператор: «C: isResponsibleForSome D», это должно подразумевать, что:
C rdfs:subClassOf
[ a owl:Restriction ;
owl:onProperty :isResponsibleFor ;
owl:someValuesFrom D].
Однако здесь пустые узлы используются неправильно, поскольку они ссылаются на определенный подкласс и некто-нибудь.Можно ли правильно закодировать это значение в OWL?Если да, то как?