взвешенный предикат RDF (owl: ObjectProperty) - PullRequest
7 голосов
/ 07 сентября 2010

в RDF оператор представлен с S, P и O; В OWL owl: ObjectProperty представляет логику предиката.

 (S) (P) (O)   
  I like dog

<owl:Class rdf:about="Person" />
<owl:NamedIndividual rdf:about="I">
    <rdf:type rdf:resource="Person"/>
    <like rdf:resource="Dog"/>
</owl:NamedIndividual>

<owl:Class rdf:about="Pet" />
<owl:NamedIndividual rdf:about="Dog">
    <rdf:type rdf:resource="Pet"/>
</owl:NamedIndividual>

<owl:ObjectProperty rdf:about="like">
    <rdfs:domain>
        <owl:Restriction>
            <owl:onProperty rdf:resource="like"/>
            <owl:someValuesFrom rdf:resource="Person"/>
        </owl:Restriction>
    </rdfs:domain>
    <rdfs:range>
        <owl:Restriction>
            <owl:onProperty rdf:resource="like"/>
            <owl:someValuesFrom rdf:resource="Pet"/>
        </owl:Restriction>
    </rdfs:range>
</owl:ObjectProperty>

Но как насчет описания "степени", которую я люблю собак? Как я могу дать свойство или значение предикату? Одно из решений, которое я получил, - расширить одно (S, P, O) утверждение до 3 утверждений. Например,

(S)             (P)        (O) 
 Person       isSrcOf    LikeRelation
 Pet          isTargetOf LikeRelation
 LikeRelation hasValue   [0~100]

Должно сработать, но, очевидно, он увеличит онтологию в 3 раза: (

Я ценю любое предложение!

Ответы [ 4 ]

7 голосов
/ 09 сентября 2010

Я бы не использовал RDF reification , не в этом случае и почти не в любом случае. Реализация RDF только усложняет ситуацию. Как вы прокомментировали, это увеличит вашу онтологию, но не только, но также сделает вашу онтологию очень трудной для применения рассуждений OWL.

Я имел дело с тем же сценарием, который вы представили, и в большинстве случаев я получал следующий дизайн.

(S) (P) [(P) (O) (P) (O)]
Мне нравится [«что мне нравится», «собака», как мне это нравится »,« очень много »]

Class: LikeLevel //it represents class of things a person likes with a degree factor.

ObjectProperty: likeObject
    Domain: LikeLevel
    Range: Pet //(or Thing)

ObjectProperty: likeScale
    Domain: LikeLevel
    Range: xsd:int //(or an enumeration class i.e: 'nothing', 'a bit', 'very much',...)

ObjectProperty: like
    Domain: Person
    Range: LikeLevel

Если вы хотите представить некоторые данные экземпляра этой моделью (в синтаксисе RDF / Turtle):

:I :like [ a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7] . 

В этом случае я создаю пустой узел для объекта LikeLevel, но вы также можете создать наземный объект, иногда вам может понадобиться / нужно избегать bNodes. В этом случае:

:I :like :a0001 .
:a0001 a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7.

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

2 голосов
/ 08 сентября 2010

Ваше предложение является действительным;он называется reification и является стандартным способом представления свойств, присущих взаимосвязи между двумя элементами в графе онтологии или RDF, где операторы делаются попарно между элементами - это ограничение данныхСама модель, которая иногда требует реификации.

Если вы беспокоитесь, что реификация раздувает вашу онтологию, вы можете попробовать следующее, но, как правило, менее желательны и имеют свои собственные проблемы:

  1. Создание определенных свойств, таких как somewhatLikes, doesntLike, loves;это может подойти, если у вас есть ограниченный набор альтернатив , и вы не против создать дополнительные свойства.Это становится утомительным и громоздким (и я зашёл бы так далеко, что предложил бы неверный ), если вы намерены закодировать «степень сходства» с помощью целого числа (или любого широкого диапазона альтернатив) - следуя этому подходу, у вас будут такие свойства, как likes0, likes1, ..., likes99, likes100.Этот метод также исключает возможность запроса, например, всех собак, которые человеку нравятся, в диапазоне значений степени, что возможно в SPARQL с указанным вами подходом к овеществлению, но не с этим подходом.
  2. Attachсвойство likesDogs для экземпляра Person, если утверждение может быть сделано против человека на всех типах / экземплярах Dog, а не на отдельных экземплярах.Это, конечно, будет зависеть от того, что вы пытаетесь захватить здесь;если это последнее, то это тоже не будет уместным.

Удачи!

0 голосов
/ 20 ноября 2015

Я думаю, что @msalvadores ошибается.

Давайте забудем о собаках и лайках. Что мы действительно делаем здесь:

a x b
axb y c
axb z d

, где axb - идентификатор оператора a x b, a, b, c, d - субъекты или объекты, а x, y, z - предикаты. Нам нужно как-то связать ресурсы a, x, b с оператором axb.

Вот как это делает овеществление:

axb subject a
axb predicate x
axb object b

Я думаю, что это очень легко понять.

Давайте проверим, что делает msalvadores:

:I :like [ a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7] . 

мы можем легко перевести это на axb условия

a x w
w type AxbSpecificObjectWrapper
w object b
w y c

, который просто имитирует реализацию с низкокачественными инструментами и большими усилиями (вам нужен класс-обертка и определите свойство объекта). Заявление a x w не имеет смысла для меня; Мне нравится, как уровень, какие объекты являются собаками ???

Но как насчет описания "степени", которую я люблю собак?

Насколько я знаю, есть 2 способа сделать это с моими очень ограниченными знаниями RDF.

1.) Использовать овеществление

stmt_1
    a LikeStatement
    subject I
    predicate like
    object dogs
    how_much "very much"

2.) Создать экземпляр класса предикатов

I like_1 dogs
like_1
    a Like
    how_much "very much"

Это зависит от вашего вкуса и фактического вокаба, который вы выберете.

Как передать свойство или значение предикату?

Не думаю, что вы понимаете разницу между предикатом и утверждением. Отличный пример об этом доступен здесь: Простой пример овеществления в RDF

Tolkien wrote Lord of the rings
Wikipedia said that

Заявление здесь:

that: [Tolkien, wrote, LotR]

Если мы делаем заявления об утверждении, мы пишем что-то вроде этого:

[Wikipedia, said, that]

Если мы делаем утверждения о предикате, то пишем что-то вроде этого:

[Wikipedia, said, wrote]

Я думаю, что есть большая разница. Реификация - это высказывание о высказываниях, а не о предикатах ...

0 голосов
/ 09 сентября 2010

Предложение из документа Джены просто бросается в глаза.

...OWL Full allows ... state the following .... construction:

<owl:Class rdf:ID="DigitalCamera">
  <rdf:type owl:ObjectProperty />
</owl:Class>
..

действительно ли OWL Full позволяет ObjectProperty также быть классом?Если ObjectProperty может быть классом и может иметь отдельных лиц, тогда я мог бы описать оператор с помощью

S_individual P_individual O_individual

, и у меня могли бы быть дополнительные свойства для P_individual.Это правильно?или я пропускаю некоторые пункты?

, поскольку следующий RDF действителен, соответствующий OWL должен быть достижимым.

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:j.0="http://somewhere/" > 

  <rdf:Description rdf:about="http://somewhere/Dog_my_dog">
    <j.0:name>Lucky</j.0:name>
  </rdf:Description>
  <rdf:Description rdf:about="http://somewhere/like_dog">
    <j.0:degree>80</j.0:degree>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/Cat_my_cat">
    <j.0:name>Catty</j.0:name>
  </rdf:Description>
  <rdf:Description rdf:about="http://somewhere/like_cat">
    <j.0:degree>86</j.0:degree>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/Person_I">
    <j.0:name>Bob</j.0:name>
    <j.0:like_dog rdf:resource="http://somewhere/Dog_my_dog"/>
    <j.0:like_cat rdf:resource="http://somewhere/Cat_my_cat"/>
  </rdf:Description>

</rdf:RDF>
...