Как настроить общие отношения объектов совы

Внимание: вопрос новичка.

Я пытаюсь смоделировать (в качестве упрощенного примера) собак с соответствующим числовым значением для набора классов, связанных с собакой, таких как «пушистость». Я запутался в том, как представить определенный тип (например, Dog), принимающий определенное числовое значение по отношению к другому типу (например, Fluffiness). Например:

:Dog rdf:type owl:Class .
:Fluffiness rdf:type owl:Class .
:describedBy rdf:type owl:ObjectProperty ;
             rdfs:domain :Dog ;
             rdfs:range :Fluffiness .
:hasValue rdf:type owl:DatatypeProperty ;
          rdfs:domain :Fluffiness ;
          rdfs:range :&xsd;float .

:Chihuahua rdf:type :Dog .

Как мне связать чихуахуа с конкретным значением, скажем, 0,1 общего свойства собаки, такого как пушистость? И есть ли способ сделать это, не прибегая к простому удалению Fluffiness как класса и определению свойства типа данных «hasFluffiness»?


person mr kw    schedule 15.07.2014    source источник


Ответы (1)


На данный момент ваше представление работает, но, на мой взгляд, оно немного запутано. Вы получаете данные экземпляра, такие как:

Chihuahua describedBy fluffiness72 .
fluffiness72 hasValue 4.

Как вы заметили, вместо этого вы могли бы иметь свойство типа данных hasFluffiness, но если вы не хотите этого делать, я думаю, вам лучше всего иметь класс Attribute, в котором есть такие вещи, как Пушистость, Размер, Удобство и т. д. – это примеры. Затем у вас может быть класс AttributeValue и свойства attribute и value (вероятно, вы можете придумать лучшие имена), чтобы вы могли записывать данные как это:

:chihuahua62 rdf:type :Chihuahua ;
             :hasAttributeValue [ :attribute :Fluffiness   ; :value 3 ] ;
             :hasAttributeValue [ :attribute :Friendliness ; :value 2 ] . 

С таким представлением вы можете сказать что-то вроде «каждый чихуахуа имеет уровень пушистости меньше 4»:

((hasAttributeValue-1.Чихуахуа) (=attribute.Fluffiness)) value.xsd:float[≤4.0]

((inverse(hasAttributeValue) некоторые чихуахуа) и (атрибут value Fluffiness)) SubClassOf (значение только xsd:float[‹= 4.0])

На английском языке это означает, что каждое AttributeValue для чихуахуа, относящееся к атрибуту Fluffiness, должно иметь значение меньше 4,0.

Вы можете использовать альтернативное представление, которое гласит: «Если у чихуахуа есть значение атрибута, то если атрибут — Пушистость, тогда значение меньше 4,0». Это эквивалентно «если у чихуахуа есть значение атрибута, то либо этот атрибут не Пушистость, либо значение меньше 4,0»:

Чихуахуа hasAttributeValue.((=attribute.Fluffiness) (value.xsd:float[≤4.0]))

Это проще написать в редакторе онтологий, поскольку это аксиома подкласса интересующего вас класса.

Вот онтология, которая показывает оба подхода:

@prefix :      <http://stackoverflow.com/q/24760392/1281433/dogProperties#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

:Shagginess  a  owl:NamedIndividual , :Attribute .

:hasValue  a         owl:DatatypeProperty ;
        rdfs:domain  :_attVal .

[ a                   owl:Class ;
  rdfs:subClassOf     [ a                  owl:Restriction ;
                        owl:allValuesFrom  [ a                     rdfs:Datatype ;
                                             owl:onDatatype        xsd:float ;
                                             owl:withRestrictions  ( [ xsd:minInclusive
                                                               10 ] )
                                           ] ;
                        owl:onProperty     :hasValue
                      ] ;
  owl:intersectionOf  ( [ a                   owl:Restriction ;
                          owl:onProperty      [ owl:inverseOf  :hasAttributeValue ] ;
                          owl:someValuesFrom  :Newfoundland
                        ] [ a               owl:Restriction ;
                            owl:hasValue    :Shagginess ;
                            owl:onProperty  :hasAttribute
                          ] )
] .

:Newfoundland  a         owl:Class ;
        rdfs:subClassOf  :Dog .

:Attribute  a   owl:Class .

:_attVal  a     owl:Class .

:hasAttribute  a     owl:ObjectProperty ;
        rdfs:domain  :_attVal ;
        rdfs:range   :Attribute .

:Chihuahua  a            owl:Class ;
        rdfs:subClassOf  :Dog ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  [ a            owl:Class ;
                                                owl:unionOf  ( [ a                 owl:Class ;
                                                                 owl:complementOf  [ a               owl:Restriction ;
                                                                                     owl:hasValue    :Shagginess ;
                                                                                     owl:onProperty  :hasAttribute
                                                                                   ]
                                                               ] [ a                  owl:Restriction ;
                                                                   owl:allValuesFrom  [ a                     rdfs:Datatype ;
                                                                                        owl:onDatatype        xsd:float ;
                                                                                        owl:withRestrictions  ( [ xsd:maxInclusive
                                                                                                          4 ] )
                                                                                      ] ;
                                                                   owl:onProperty     :hasValue
                                                                 ] )
                                              ] ;
                           owl:onProperty     :hasAttributeValue
                         ] .

:hasAttributeValue  a  owl:ObjectProperty ;
        rdfs:range  :_attVal .

:Dog    a       owl:Class .

<http://stackoverflow.com/q/24760392/1281433/dogProperties>
        a       owl:Ontology .
person Joshua Taylor    schedule 15.07.2014
comment
Спасибо! Похоже, что первый подход - это то, что мне нужно - вместо того, чтобы создавать конкретные экземпляры для каждой комбинации атрибута/значения, я могу использовать пустой узел, чтобы указать некоторый экземпляр Fluffiness, связанный с экземпляром собаки, и связанное значение с этим экземпляром атрибута. - person mr kw; 16.07.2014
comment
Первый и второй подходы, которые я упомянул (после описания того, на что похож ваш текущий подход), одинаковы; разница только в том, как я написал аксиому. В обоих случаях идея состоит в том, чтобы использовать вспомогательную особь как n-арное отношение, которое связывает собаку, атрибут и ценность. Я рад, что похоже, что это работает для вас! - person Joshua Taylor; 16.07.2014