Прежде чем ответить на ваш вопрос, позвольте мне сказать вам, что 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-битными архитектурами наших старых компьютеров.