新手问题:如何表达与rdf的关系?

时间:2011-09-02 13:32:25

标签: rdf

我知道这听起来非常新手,但即使在浏览过RDF的W3学校的一些教程并阅读了这些初级读物之后,我似乎无法理解如何用XML表达简单的主谓词 - 对象rdf关系。 / p>

假设我有这样一个概念:

我有一辆车。 我的车有一个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 个答案:

答案 0 :(得分:6)

我同意其他响应者的说法,你不应该担心XML语法,但我也不建议立即考虑三元组。首先要清楚地思考你想要建模的事情,然后三元组会更加明显。

所以,你有一个东西,你的车,这是一种汽车。作为一般的汽车,特别是你的汽车,是两种不同的概念。因此,您需要两个不同的名称 - RDF称它们为资源 - 以表示所有汽车的类别和汽车的实例。同样地,有些东西通常是GPS,特别是你车内的GPS。假设一个合适的命名空间,那么:

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

这是一个三重表达一个给定的汽车(主题car127)是(谓词rdf:type)所有汽车的类(对象Car)的成员,并且类似于全球定位系统。

你的车由Nina拥有,Nina是一个人。所以这是另外两个关系,一个说Nina是一个人,一个是Nina拥有那辆特定的汽车(通过重新使用识别汽车的相同资源):

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

(好的,我添加了一个额外的三元组来将资源URI :nina与名称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,以及读取的时间。如果我们想要的话,我们可以为其他时间点添加更多的读数,这将构建一个轨道......但这是另一个讨论!

答案 1 :(得分:3)

我会尽量不考虑你需要XML的样子,规范允许多种方式来序列化相同的信息,所以我会尝试在三元组中思考它。

所以对你的例子来说:

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

这是表达它的一种相当基本的方式,并且还有像皮埃尔所建议的其他选择。

RDF中的所有内容都表示为三元组,因此请尝试考虑如何在三元组中表示数据,然后使用可用的库/工具为您生成RDF / XML等序列化。

答案 2 :(得分:0)

我会写(忽略命名空间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>

您可以在http://www.w3.org/RDF/Validator/

验证您的rdf