我知道这听起来非常新手,但即使在阅读了有关 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>
是这样写的吗?我难以理解的是主语、宾语和谓词如何映射到元素和属性。
一旦我解决了这个问题,最终我希望“汽车”成为它自己的模式,所以我可以引用它的命名空间,然后说“我拥有汽车模型 ABC 车牌 DEF,现在位于 12.34 坐标”。
拜托,请照亮一些?在我的智慧的尽头,我周围似乎没有人知道 rdf 或本体来启发我:-(
最佳答案
我同意其他响应者的意见,即您不应该担心 XML 语法,但我也不建议立即考虑三元组。首先从清楚地思考你要建模的东西开始,然后三元组会更加明显。
所以,你有一个东西,你的车,它是一种车。一般而言,作为任何类型的汽车,特别是作为您的汽车,是两个不同的概念。因此,您需要两个独立的名称——RDF 将它们称为资源——来表示所有汽车的类和汽车的实例。同样,有些东西通常是 GPS 的,特别是您汽车中的 GPS。假设一个合适的命名空间,那么:
:car127 rdf:type :Car .
:gps99 rdf:type :GPS.
这是一个三元组,表示给定的汽车(主体
car127
)是所有汽车(对象 rdf:type
)的类(谓词 Car
)的成员,同样是 GPS 的一个。你的车归妮娜所有,她是一个人。所以这是另外两个关系,一个说 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
的资源之间存在关系 (':reading') 就足够了。 (注意大写的 R - 这是一种区分资源的约定,这些资源标识类与其他类型的资源)。该阅读资源有四个属性:类型、观察到的经纬度和阅读时间。如果我们愿意,我们可以为其他时间点添加更多读数,这将构建轨道建模......但这是另一个讨论!
关于rdf - 新手问题 : how to express relationships with rdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284169/