Использование Исключено в OWL
Уважаемые сотрудники Semantic Web!
Я спрашиваю себя, как я могу определить конструкцию "Исключено" в OWL. Пока единственное решение, которое я могу придумать, это использовать disjointWith. Что я имею в виду под "Исключено", показано в примере кода. Объект Дом - это пересечение крыши, стены, окон и пола. Так что, если один из этих классов пропустит, человек не станет Домом. Но логический вывод пойдет дальше с рассуждениями, потому что, возможно, недостающие классы для конкретного пересечения станут истинными. С другой стороны, класс Хауса имеет несвязанные отношения с классом цунами. Когда мой человек учится на занятиях по цунами, я точно знаю, что мой человек никогда не станет учеником Дома. Такое поведение я ожидаю, когда говорю о "Исключено". Но, может быть, у кого-то другое мнение по этому поводу?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.almfluss.com/rdf/0.1/Ontology.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<owl:Class rdf:about="#House">
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="#Roof"/>
<rdf:Description rdf:about="#Wall"/>
<rdf:Description rdf:about="#Windows"/>
<rdf:Description rdf:about="#Floor"/>
</owl:intersectionOf>
<owl:disjointWith rdf:resource="#Tsunami"/>
</owl:Class>
<owl:NamedIndividual rdf:about="#instance_House">
<rdf:type rdf:resource="#Roof"/>
<rdf:type rdf:resource="#Wall"/>
<rdf:type rdf:resource="#Windows"/>
<rdf:type rdf:resource="#Floor"/>
<rdf:type rdf:resource="#Tsunami"/>
</owl:NamedIndividual>
<owl:Class rdf:about="#Roof"/>
<owl:Class rdf:about="#Wall"/>
<owl:Class rdf:about="#Windows"/>
<owl:Class rdf:about="#Floor"/>
<owl:Class rdf:about="#Tsunami"/>
</rdf:RDF>
С уважением, Мартейн ван дер Плаат
1 ответ
Если честно, я не совсем понимаю, что вы ищете. Тем не менее, я чувствую, что вы пытаетесь использовать OWL совершенно неправильно. Итак, вот несколько советов, как получить лучшую модель, которая, я надеюсь, поможет вам лучше понять, как эффективно использовать OWL.
Наиболее важной проблемой в вашем примере онтологии является то, что вы используете отношения класса с экземпляром таким образом, что это не имеет смысла. У вас есть человек, который имеет тип крыши, стены, окна и пол. Концептуально это просто бессмыслица: как могут быть все эти четыре вещи одновременно?
Отношения между домами и крышами / стенами / окнами не в том, что одно является другим (isA), а в том, что они являются частью друг друга. Поэтому вы не должны использовать такие вещи, как пересечения и аксиомы непересекаемости, чтобы попытаться смоделировать вашу онтологию, а вместо этого использовать отношения и ограничения свойств.
Например, чтобы смоделировать, что дом должен состоять как минимум из одной крыши, четырех стен и окна, вы можете сделать что-то вроде этого (используя синтаксис OWL Manchester):
Prefix: : <http://example.org/>
Class: Roof
Class: Window
Class: Wall
Class: House
SubClassOf: hasRoof min 1 and hasWall min 4 and hasWindow min 1
Class Tsunami
DisjointWith: House
ObjectProperty: hasRoof
Domain: House
Range: Roof
ObjectProperty: hasWall
Domain: House
Range: Wall
ObjectProperty: hasWindow
Domain: House
Range: Window
Individual: myHouse
Types: House
Обратите внимание, как мы определяем класс домов как подкласс всех вещей, которые имеют как минимум четыре стены и одну крышу и как минимум одно окно. Обратите внимание, что мы используем отношение подкласса (а не отношение эквивалентного класса), потому что мы хотим сказать, что если что-то является домом, оно должно иметь эти вещи. Мы не хотим говорить обратное, потому что, в конце концов, существуют вещи, которые имеют четыре стены, крышу и окно, но которые не являются домами (например, сараи, сараи, магазины).
Что касается цунами: хотя верно, что класс домов и класс цунами не пересекаются, я не совсем уверен, что это особенно полезная вещь для моделирования. Более интересные отношения между цунами и домами, вероятно, заключаются в том, что одно представляет опасность для другого.
Также обратите внимание: это всего лишь пример возможного способа его моделирования. Вы можете сделать альтернативный выбор в моделировании (например, используя общий hasPart
свойство вместо конкретного hasRoof
/hasWall
/hasWindow
свойства для моделирования отношений между домами и крышами, стенами и окнами), которые одинаково хороши, в зависимости от ваших потребностей / вкусов.