我知道这听起来非常新鲜,但即使在浏览过RDF上的W3学校的一些教程并阅读了这些入门书之后,我似乎也无法理解如何用XML表达简单的主谓词对象rdf关系.
假设我有这样一个概念:
我有一辆车.我的车有一个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>
Run Code Online (Sandbox Code Playgroud)
这是怎么写的?我理解的是主题,对象和谓词如何映射到元素和属性.
一旦我对它进行了整理,最终我希望"car"成为它自己的架构,所以我只能参考它的命名空间,然后说出"我自己的汽车模型ABC车牌DEF现在在12.34坐标".
请详细说明一下?在我的智慧结束,我周围没有人似乎知道rdf或本体来启发我:-(
我同意其他响应者的说法,你不应该担心XML语法,但我也不建议立即考虑三元组.首先要清楚地思考你想要建模的事情,然后三元组会更加明显.
所以,你有一个东西,你的车,这是一种汽车.作为一般的汽车,特别是你的汽车,是两种不同的概念.因此,您需要两个不同的名称 - RDF称它们为资源 - 以表示所有汽车的类别和汽车的实例.同样地,有些东西一般都是GPS,特别是你车里的GPS.假设一个合适的命名空间,那么:
:car127 rdf:type :Car .
:gps99 rdf:type :GPS.
Run Code Online (Sandbox Code Playgroud)
这是一个表示给定汽车(主题car127)是(谓词rdf:type)所有汽车(对象Car)的类别的成员,并且类似地用于GPS.
你的车由Nina拥有,Nina是一个人.所以这是另外两个关系,一个说Nina是一个人,一个是Nina拥有那辆特定的汽车(通过重新使用识别汽车的相同资源):
:nina rdf:type foaf:Person.
:nina foaf:name "Nina".
:car127 :ownedBy :nina.
Run Code Online (Sandbox Code Playgroud)
(好吧,我添加了一个额外的三元组来将资源URI :nina与名称Nina相关联).
特定的GPS是特定汽车的一个组成部分:
:car127 :containsComponent :gps99.
Run Code Online (Sandbox Code Playgroud)
现在,我们非正式地说,GPS"具有"给定的纬度和长位置.显然这些变化随着时间的推移(如果没有,得到一辆新车:).您可以通过将x和y谓词直接附加到GPS资源并重复更新模型中的值来对此进行建模.但是,如果你想到你的GPS在特定时间给出一系列读数,它似乎更清晰,更具描述性.然后我们有:
:gps99 :reading [
rdf:type :Reading;
:lat 51.14276;
:long -2.71619;
:at "2011-09-02T123400"^^xsd:dateTime
].
Run Code Online (Sandbox Code Playgroud)
方括号[...]是引入新资源的简便方法,其资源的属性 - 关系 - 我们可以描述,但我们不知道或不关心其身份.从技术上讲,它被称为匿名节点或bNode,但这不是现在要担心的细节.这足以说明从GPS设备到类型资源之间存在关系(':阅读'):Reading(注意资本R--这是区分识别类与其他资源类型的资源的惯例).该读取资源具有四个属性:类型,观察到的lat和long,以及读取的时间.如果我们想要的话,我们可以为其他时间点添加更多读数,这将构建一个轨道......但这是另一个讨论!