Картирование онтологий

Для того чтобы онтологии имели максимальный эффект, они должны быть широко распространены. А чтобы минимизировать интеллектуальные усилия, затрачиваемые на разработку онтологий, они должны быть пригодны для многократного использования. В наилучшем варианте они должны быть составлены из компонентов.

Как правило, большая часть усилий по разработке онтологии состоит в связывании классов и свойств с целью максимально точного отражения заложенного в понятия смысла. Это – самая емкая часть разработки онтологии.

Эквивалентность классов и свойств (equivalentClass, equivalentProperty). Чтобы связать вместе ряд онтологий, входящих в качестве компонентов в другие онтологии, часто полезно иметь возможность указать, что данный класс или свойство в одной онтологии эквивалентны классу или свойству в другой. Если при этом объединенные онтологии являются противоречивыми (например, в одной онтологии «все А – это В», а в другой «все А – это не В»), то не будет никакого расширения (ни индивидов, ни отношений), которое удовлетворяло бы получающейся комбинации.

Свойство owl:equivalentClass используется, чтобы показать, что 2 класса имеют абсолютно одинаковых представителей. Отметим, что в OWL DL классы просто обозначают наборы индивидов, но не самих индивидов. Однако в OWL Full существует возможность использовать owl:sameAs между двумя классами, чтобы показать, что они идентичны во всех отношениях.

Выражения класса могут быть адресатами как в rdfs:subClassOf, так и в owl:equivalentClass. Это избавляет от необходимости создавать названия для каждого выражения класса и обеспечивает мощную способность определения, основанную на удовлетворении характеристик свойств. Например:

<owl:Class rdf:ID="МосковскиеВещи">

<owl:equivalentClass>

<owl:Restriction>

<owl:onProperty rdf:resource="#расположенВ" />

<owl:someValuesFrom rdf:resource="#РегионМосковский" />

</owl:Restriction>

</owl:equivalentClass>

</owl:Class>

Здесь МосковскиеВещи – это именно вещи, расположенные в Московском регионе. Различие между таким использованием owl:equivalentClass и rdfs:subClassOf – это различие между условиями «необходимого» и «необходимого и достаточного». В случае использования subClassOf вещи, расположенные в Московском регионе, не обязательно должны относиться к классу МосковскиеВещи. Но при использовании owl:equivalentClass все, что расположено в Московском регионе, должно быть в классе МосковскиеВещи.

Идентичность между индивидами (sameAs). Этот механизм аналогичен подобному механизму для классов, но объявляет идентичными двух индивидов. Наиболее часто sameAs применяется для того, чтобы приравнять индивидов при унификации онтологий.

Очень важным моментом является то, что в OWL нет допущения об уникальном имени. То, что 2 имени отличны друг от друга, не означает, что они обозначают различных индивидов; sameAs провозглашает идентичность между двумя разными именами. Отметим, что использование sameAs для приравнивания двух классов неэквивалентно приравниванию их с помощью equivalentClass. Это заставляет классы быть интерпретируемыми как индивиды. В данном случае онтология относится к категории OWL Full. В OWL Full sameAs может использоваться для приравнивания любых элементов онтологии и приводит к тому, что эти элементы интерпретируются как индивиды.

Различие индивидов (differentFrom, AllDifferent). Это – один из способов утверждать, что значения взаимно отличны. Существует также более удобный механизм для определения набора взаимно различных индивидов. Следующий фрагмент утверждает, что понятия Студент, Школьник, Аспирант – все взаимно различны:

<owl:AllDifferent>

<owl:distinctMembers rdf:parseType="Collection">

<vin:Учащийся rdf:about="#Студент" />

<vin:ЦветВина rdf:about="#Школьник" />

<vin:ЦветВина rdf:about="#Аспирант" />

</owl:distinctMembers> </owl:AllDifferent>

Отметим, что owl:distinctMembers может использоваться только в комбинации с owl:AllDifferent.

4.5. Сложные классы [OWL DL]

Для формирования классов OWL обеспечивает дополнительные конструкции, которые могут использоваться для создания так называемых выражений класса. OWL поддерживает основные операторы множеств, а именно объединение, пересечение и дополнение. Они называются, соответственно, owl:unionOf, owl:intersectionOf и owl:complementOf. Дополнительно классы могут быть перечисленными. Расширения класса могут быть заявлены явно посредством конструктора oneOf. Существует возможность утверждения, что расширения класса должны быть непересекающимися.

Отметим, что выражения класса могут быть вложены одно в другое, не требуя создания имен для каждого промежуточного класса. Это позволяет использовать операции со множествами для создания сложных классов из анонимных классов или классов с ограничениями по значению.

Декларации intersectionOf, unionOf, complementOf для множеств. Важно, что расширения классов OWL – это множества, состоящие из индивидов, которые являются членами этого класса. OWL обеспечивает средства для манипулирования расширениями класса, используя основные операторы множеств.

Пересечение [некоторое использование OWL DL]. Приведем пример использования конструкции intersectionOf:

<owl:Class rdf:ID="СтудентЛЭТИ">

<owl:intersectionOf rdf:parseType="Collection">

<owl:Class rdf:about="#Студент" />

<owl:Class rdf:about="#УниверситетЛЭТИ" />

</owl:intersectionOf>

</owl:Class>

Класс СтудентЛЭТИ – это в точности пересечение классов Студент и УниверситетЛЭТИ.

Объединение [OWL DL]. Конструкция unionOf используется аналогично intersectionOf:

<owl:Class rdf:ID="Студент">

<owl:unionOf rdf:parseType="Collection">

<owl:Class rdf:about="#СтудентЛЭТИ" />

<owl:Class rdf:about="#СтудентЛИТМО" />

</owl:unionOf>

</owl:Class>

Класс Студент включает расширение обоих классов – СтудентЛЭТИ и СтудентЛИТМО.

Важно отметить отличие последней конструкции типа объединение от приведенной ниже:

<owl:Class rdf:ID="Студент">

<rdfs:subClassOf rdf:resource="# СтудентЛЭТИ " />

<rdfs:subClassOf rdf:resource="# СтудентЛИТМО " />

</owl:Class>

В данном случае представители класса Студент представляют собой подмножество пересечения классов СтудентЛЭТИ и СтудентЛИТМО, которое, скорее всего, будет пустым множеством.

Дополнение [OWL DL]. Конструкция complementOf выделяет всех индивидов из домена обсуждения, которые не принадлежат данному классу. Обычно при этом обращаются к очень большому набору индивидов:

<owl:Class rdf:ID="Студент" />

<owl:Class rdf:ID="НеСтудент">

<owl:complementOf rdf:resource="#Студент" />

</owl:Class>

Класс НеСтудент включает в качестве своих членов всех индивидов, которые не относятся к классу Студент. Фактически, эта конструкция представляет собой разницу множеств owl:Thing (Вещь) и Студент.

Ниже приведен типичный образец применения конструкции complementOf в комбинации с другими операторами множеств:

<owl:Class rdf:ID="СтудентЗарубежногоВУЗа">

<owl:intersectionOf rdf:parseType="Collection">

<owl:Class rdf:about="#Студент"/>

<owl:Class>

<owl:complementOf>

<owl:Restriction>

<owl:onProperty rdf:resource="#расположенВ" />

<owl:hasValue rdf:resource="#РегионРоссия" />

</owl:Restriction>

</owl:complementOf>

</owl:Class>

</owl:intersectionOf>

</owl:Class>

Здесь класс СтудентЗарубежногоВУЗа задается как пересечение класса Студент с множеством всех вещей, не расположенных в России.

Перечисленные классы oneOf [OWL DL]. OWL обеспечивает средства определения класса через прямое перечисление его членов. Это делается с помощью конструкции oneOf, которая полностью определяет диапазон класса, так что никакие другие индивиды не могут быть объявлены как принадлежащие к данному классу.

Непересекающиеся классы disjointWith [OWL DL]. Непересекаемость набора классов может быть выражена с помощью конструкции owl:disjointWith. Это гарантирует, что индивид, который является членом одного класса, не может одновременно быть представителем обозначенного другого класса. Следующий пример демонстрирует множественные непересекающиеся классы:

<owl:Class rdf:ID="Студент">

<rdfs:subClassOf rdf:resource="#Учащийся"/>

<owl:disjointWith rdf:resource="#Ученик"/>

<owl:disjointWith rdf:resource="#Инженер"/>

<owl:disjointWith rdf:resource="#Преподаватель"/>

</owl:Class>

Часто требуется определить класс как объединение нескольких взаимно непересекающихся подклассов:

<owl:Class rdf:ID="СтудентВУЗа">

<rdfs:subClassOf rdf:resource="#Учащийся" />

</owl:Class>

<owl:Class rdf:ID="СтудентНеВУЗа">

<rdfs:subClassOf rdf:resource="#Учащийся" />

<owl:disjointWith rdf:resource="#СтудентВУЗа" />

</owl:Class>

<owl:Class rdf:ID="Студент">

<owl:unionOf rdf:parseType="Collection">

<owl:Class rdf:about="# СтудентВУЗа " />

<owl:Class rdf:about="# СтудентНеВУЗа " />

</owl:unionOf>

</owl:Class>

Пример определяет, что Студент – это объединение СтудентВУЗа и СтудентНеВУЗа. Причем известно, что эти подклассы точно делят класс Студент на 2 различных подкласса, так как являются непересекающимися.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: