Как мы можем указать значения в экземпляре класса в OWL XML? - PullRequest
0 голосов
/ 03 октября 2019

Я только начал использовать OWL XML и пытался присвоить значения экземплярам класса, но не могу понять, как это можно сделать. Я знаю, что экземпляры могут быть указаны с помощью rdf: тип . Пожалуйста, рассмотрите Java-класс Organism следующим образом:

class Organism {
    String name;
    List<Features> features;     
}

class Features {
    int feature1;
    String name;
}

Этот класс расширен классом Animal и Plant следующим образом:

class Animal extends Organism {
    int animal_property;
}

class Plant extends Organism {
    int plant_property;
}

Теперь я хочу написать OWL / XML, изображающийвыше структура. Я сделал OWL / XML, как показано ниже:

 <owl:Class rdf:ID="Organism">
     <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
 </owl:Class>

 <owl:Class rdf:ID="Feature">
     <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
 </owl:Class>

 <owl:Class rdf:ID="Animal">
     <rdfs:subClassOf rdf:resource="#Organism"/>
 </owl:Class>

 <owl:Class rdf:ID="Plant">
     <rdfs:subClassOf rdf:resource="#Organism"/>
 </owl:Class>

 <owl:DatatypeProperty rdf:ID="name">
     <rdfs:domain rdf:resource="#Organism"/> <!-- can we specify two domain here for Feature and Organism? -->
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
 </owl:DatatypeProperty>

 <owl:ObjectProperty rdf:ID="features">
     <rdfs:domain rdf:resource="#Organism"/> 
     <rdfs:range rdf:resource="#Feature"/>
 </owl:ObjectProperty>

 <owl:DatatypeProperty rdf:ID="animal_property">
     <rdfs:domain rdf:resource="#Organism"/> <!-- can we specify two domain here for Feature and Organism? -->
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
 </owl:DatatypeProperty>

 <owl:DatatypeProperty rdf:ID="plant_property">
     <rdfs:domain rdf:resource="#Organism"/> **<!-- can we specify two domain here for Feature and Organism? -->**
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
 </owl:DatatypeProperty>

Пожалуйста, исправьте меня, если приведенное выше определение неверно. Если вы хотите создать экземпляры следующим образом:

Animal -> (name, features, animal_property) -> ("Spider",{feature1,feature2},5}
Plant -> (name, features, plant_property) -> ("Rose",{feature2,feature3},2}

feature1 -> (feature1, name) -> (8,"number of legs");
feature2 -> (feature1, name) -> (2,"tentacles");

feature3 -> (feature1, name) -> (1,"rose_feature_1");
feature4 -> (feature1, name) -> (2,"rose_feature_2");

Как я могу представить это в OWL / XML?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Прежде чем ответить на ваш вопрос, позвольте мне сказать вам, что OWL не является объектно-ориентированным языком программирования. Вы не можете моделировать классы Java с помощью OWL. С учетом сказанного часто бывает, что классы Java соответствуют представлению в памяти того, о чем вы хотите представлять знания. Таким образом, могут существовать соответствия между моделью ООП и онтологией OWL. Тем не менее, не существует единого способа сопоставить модель ООП с онтологией OWL, и есть подводные камни, которых следует избегать.

Одна очень распространенная ошибка, которую делают люди, когда думают об OWL как объектно-ориентированном формализме, - это думатьчто классы имеют атрибуты, и что атрибуты или свойства принадлежат классу. В OWL их нет. Хотя иногда можно понять смысл предложения типа «свойство name класса Organism», в OWL это имеет такое же значение, как и «класс Organism свойства name». Классы и свойства существуют самостоятельно, независимо друг от друга. Ни один не принадлежит другому. Однако они могут быть связаны по-разному.

Другая типичная ошибка - неверная интерпретация отношений domain и range, которые связывают свойство с классом. Объекты, у которых есть свойство, набираются с каждым доменом, которым обладает свойство.

Теперь давайте вернемся к вашей проблеме. Очень сложно ответить на вашу проблему с моделированием без более подробной информации о том, что вы пытаетесь смоделировать. Как я уже сказал, наличия Java-класса недостаточно, чтобы сказать, как следует определять соответствующие термины OWL. Например, что вы подразумеваете под термином «особенность»? Атрибут features класса Java Organism является списком. Важен ли порядок? animal_property это число ?! Что представляет собой это число? name должно быть понято в здравом смысле английское слово "имя"? На мой взгляд, можно назвать все, что только можно придумать, а не только организмы или особенности.

В вашем случае, интуитивное понимание того, что вы хотите, должно быть угадано на основе выбора английских слов, которые выи приблизительное представление о том, для чего обычно используются программные конструкции. Моя интуиция заключается в том, что было бы неплохо сопоставить каждый класс Java с классом OWL и сопоставить наследование с отношением subClassOf.

Для свойств это сложнее. Большинство атрибутов Java, имеющих примитивный тип, естественным образом преобразуются в свойство типа данных OWL. Но не всегда! ООП-классы часто содержат вспомогательные структуры данных, которые имеют смысл только для логики приложения, но не имеют отношения к представлению наших знаний о типе сущностей. В вашей модели очень возможно, что атрибут feature1 в классе Java Features вообще не должен быть сопоставлен со свойством OWL. Атрибут name в Organism может отображаться на то же свойство, что и атрибут name в Features, но, возможно, нет, в зависимости от того, что вы имеете в виду. Моя интуиция заключается в том, что должно быть одно свойство name, которое должно , а не иметь какой-либо определенный домен (чтобы его можно было безопасно использовать на любом объекте).

Языки ООП имеют примитивные данныетипы, которые очень похожи на типы данных схемы XML (XSD). Однако «очевидное» отображение не всегда является лучшим. С моим пониманием свойства name я бы ожидал, что могут использоваться языковые теги. Если диапазон равен xsd:string, то литералы, помеченные языком, запрещены.

Исходя из названия свойства features и класса Feature, я бы согласился с тем, что диапазон features долженбыть Feature, хотя я не очень понимаю, что Feature должен представлять. Должен ли домен быть Organism, полностью зависит от того, что именно представляет класс Feature.

Наконец, свойства animal_property и plant_property являются загадочными, и у меня есть интуиция, что они не представляют большую часть внутренней природы животных и растений. В любом случае, есть ли причина ограничивать размер этих целых чисел, чтобы они помещались в xsd:int? In general, it is good practice to use xsd: integer` для чисел, у которых нет особых причин для ограничения. Нет оснований ограничивать наше представление о мире слабыми 32-битными архитектурами наших старых компьютеров.

0 голосов
/ 04 октября 2019

Ваше свойство данных name должно иметь только Feature в качестве своего домена. Organism не будет доменом для этого свойства в иерархии классов, которую вы планируете создать.

В OWL можно использовать несколько доменов, но учтите, что использование свойства с двумя или более доменами означаетчто лица, выступающие в качестве субъектов, принадлежат пересечению доменов. Я не думаю, что вы хотите создавать людей, которые являются экземплярами Organism и Feature.

...