Создание отношений между классами на языке веб-онтологий (сова)

Мне нужно определить отношения между классами в моей онтологии в синтаксисе OWL. что я должен делать?

2 ответа

Во-первых, обратите внимание, что есть два синтаксиса XML (в дополнение к нескольким другим синтаксисам, отличным от XML), которые вы можете использовать для написания OWL. Ваш фрагмент в синтаксисе RDF/XML. Другой синтаксис - OWL/XML. Учебник по OWL содержит примеры обоих синтаксисов.

Ваш фрагмент говорит:

  • URI <#net> идентифицирует класс.
  • Этот класс имеет метку "сеть" (строка).
  • Этот класс находится в отношении "hasPart" с чем-то, что идентифицируется URI <#Node>,

Первые две вещи имеют смысл, но последняя не совсем. Я думаю, что вы действительно хотите сказать:

  • URI <#Node> также идентифицирует класс.
  • URI <#hasPart> идентифицирует свойство, которое связывает людей двух классов (owl:ObjectProperty).
  • Субъектами свойства hasPart являются сети (другими словами, домен hasPart #net).
  • Объекты свойства hasPart являются узлами (другими словами, диапазон hasPart равен #node).

Изучение примеров в OWL Primer должно дать вам хорошее представление о том, как записать эти вещи. Но также обратите внимание, что написание синтаксиса RDF/XML вручную является утомительным и подверженным ошибкам. Возможно, вы захотите использовать редактор OWL, например, TopBraid Composer, или библиотеку программирования, например, OWL-API, для создания ваших файлов OWL. Если вы действительно хотите писать их вручную, я рекомендую использовать синтаксис Turtle (опять же, у Primer есть примеры), потому что он гораздо более читабелен и дает вам преимущество в изучении SPARQL, языка запросов для OWL и RDF.

Я согласен с Cygri, что в отношении #net в #Node как будто это не имеет смысла, и, вероятно, вы хотели бы, чтобы все случаи #net иметь часть или некоторые части, которые являются примерами #Node, Для этого вы можете написать:

<owl:Class rdf:ID="Node"/>
<owl:Class rdf:ID="net">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="#hasPart"/>
            <owl:someValuesFrom rdf:resource="#Node"/>
        </owl/Restriction>
    </rdfs:subClassOf>
</owl:Class>

Вы все еще можете определить свойства, которые соединяют два класса напрямую. Например:

<#Node>  <#isSimilarTo>  <#Vertice> .

Чтобы сделать это в OWL, вы можете определить owl:AnnotationProperty:

<owl:AnnotationProperty rdf:about="isSimilarTo"/>
<owl:Class rdf:ID="Node">
    <isSimilarTo rdf:resource="#Vertice"/>
</owl:Class>

Или вы можете использовать "punning", то есть использовать класс в качестве экземпляра, например:

<owl:ObjectProperty rdf:about="isSimilarTo"/>
<owl:Class rdf:ID="Node">
    <rdf:type rdf:resource="&owl;Thing"/>
    <isSimilarTo>
        <owl:Thing rdf:about="#Vertice"/>
    </isSimilarTo>
</owl:Class>

Обратите внимание, что в OWL DL все экземпляры должны быть явно напечатаны. Вот, #Node объявлен как класс и экземпляр owl:Thing, Это не значит что owl:Thing может содержать классы, но это означает, что #Node ссылаются на две разные вещи: класс и экземпляр. В OWL DL контекст, в котором появляется IRI, всегда проясняет, к чему относится этот термин.

Другие вопросы по тегам