Вопрос новичка: как выразить отношения с rdf? - PullRequest
7 голосов
/ 02 сентября 2011

Я знаю, что это звучит крайне ново для новичков, но даже пройдя некоторые учебники по школам W3 по RDF и прочитав учебник для начинающих, я не могу понять, как выражается простая связь rdf субъект-предикат-объект в XML.

Допустим, у меня есть такая концепция:

У меня есть машина. В моей машине есть GPS-приемник. Текущие GPS-координаты автомобиля: X широта, Y долгота.

Я представляю это как

<RDF>
 <Owner Name="me">
  <has>car</has>
 <car>
  <has>gpsreceiver</has>
  <has><cordinates X="somevalue", Y="somevalue"></has>
 </car>
 </Owner>
</RDF>

Это так написано? Что мне трудно понять, так это то, как предметы, объекты и предикаты отображаются в элементы и атрибуты.

как только я разобрался с этим, в конечном счете, я хотел бы, чтобы "car" была его собственной схемой, поэтому я могу просто сослаться на его пространство имен и просто сказать что-то вроде "У меня есть модель автомобиля ABC, номерной знак DEF, который сейчас в 12,34 координаты ".

Пожалуйста, пожалуйста, пролите немного света? В конце моего ума, и никто вокруг меня, кажется, не знает rdf или онтологий, чтобы просветить меня: - (

Ответы [ 3 ]

6 голосов
/ 03 сентября 2011

Я согласен с другими респондентами в том, что вам не следует беспокоиться о синтаксисе XML, но я бы также не советовал сразу думать о тройках. Сначала подумайте о том, что вы пытаетесь смоделировать, тогда тройки станут более очевидными.

Итак, у вас есть вещь, ваша машина, которая является своего рода машиной. Быть любым видом автомобиля в целом и быть вашим автомобилем в частности - это два разных понятия. Таким образом, вам понадобятся два отдельных имени - RDF называет их ресурсами - для представления класса всех автомобилей и экземпляра вашего автомобиля. Кроме того, есть вещи, которые являются GPS в целом, и GPS в вашем автомобиле в частности. Предполагая подходящее пространство имен, тогда:

:car127 rdf:type :Car .
:gps99 rdf:type :GPS.

Это тройное выражение, означающее, что данный автомобиль (субъект car127) является членом (предикат rdf:type) класса всех автомобилей (объект Car) и аналогичным образом относится к GPS.

Ваша машина принадлежит Нине, которая является человеком. Итак, это еще два отношения: одно говорит о том, что Нина - человек, а другое - о том, что Нина владеет этим конкретным автомобилем (повторно используя тот же ресурс, идентифицирующий автомобиль):

:nina rdf:type foaf:Person.
:nina foaf:name "Nina".
:car127 :ownedBy :nina.

(ОК, я добавил дополнительную тройку, чтобы связать URI ресурса :nina с именем Нина).

Определенный GPS является компонентом конкретного автомобиля:

:car127 :containsComponent :gps99.

Теперь мы неофициально говорим, что GPS «имеет» заданную широту и длинную позицию. Ясно, что они меняются с течением времени (если нет, получить новую машину :). Вы можете смоделировать это, используя предикаты x и y, непосредственно связанные с ресурсом GPS, и многократно обновляя значения в модели. Но если вы думаете о том, что ваш GPS дает серию показаний в определенное время, он кажется немного более понятным и более наглядным. Тогда имеем:

:gps99 :reading [
    rdf:type :Reading;
    :lat 51.14276;
    :long -2.71619;
    :at "2011-09-02T123400"^^xsd:dateTime
].

Квадратные скобки [...] - это краткий способ представить новый ресурс, свойства которого - отношения - мы можем описать, но о личности которого мы не знаем или не заботимся. Технически это называется анонимным узлом или bNode, но сейчас не о чем беспокоиться. Достаточно отметить, что существует связь («: чтение») от устройства GPS с ресурсом типа :Reading (обратите внимание на заглавную R - это соглашение, позволяющее отличать ресурсы, которые идентифицируют классы от других видов ресурсов). Этот ресурс чтения имеет четыре свойства: тип, наблюдаемый lat и long и время чтения. Мы могли бы, если бы захотели, добавить больше показаний для других моментов времени, что могло бы привести к моделированию дорожки ... но это другое обсуждение!

3 голосов
/ 02 сентября 2011

Я бы никогда не задумывался о том, как вам нужен XML, спецификация допускает несколько способов сериализации одной и той же информации, поэтому я бы попытался подумать об этом трижды.

Ваш пример:

:Me :owns :MyCar .
:MyCar :hasPart :GpsReceiver .
:MyCar :hasXPosition "x" .
:MyCar :hasYPosition "y" .

Это довольно простой способ выразить это, и есть альтернативы, такие как то, что предложил Пьер.

Все в RDF представлено как тройки, поэтому постарайтесь подумать окак бы вы представляли свои данные в тройках, а затем использовали доступные библиотеки / инструменты для создания сериализаций, таких как RDF / XML, для вас.

0 голосов
/ 02 сентября 2011

Я бы написал (игнорируя пространства имен decl)

<rdf:RDF >
 <!-- about 'me' -->
 <my:Owner rd:about="http://example.com/me">
  <my:has rdf:resource="http://example.com/thecar"/>
 </my:Owner>

 <!-- about the car -->
 <my:Car rdf:about="http://example.com/thecar">
  <my:hasPosition>
     <my:Gpsreceiver>
         <my:X>somevalue</my:X>
         <my:Y>somevalue</my:Y>
      </my:Gpsreceiver>
   </my:hasPosition>
 </my:Car>
</rdf:RDF>

Вы можете проверить свой rdf по адресу: http://www.w3.org/RDF/Validator/

...