RDF与乌龟的文本表示

时间:2016-04-02 21:32:13

标签: rdf turtle-rdf

我想用Turtle做一个RDF图的文本表示。作为一个例子,蜘蛛侠和绿妖精之间的关系。请参阅此处的参考https://www.w3.org/TR/turtle/

@base <http://example.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rel: <http://www.perceive.net/schemas/relationship/> 

<#green-goblin>
    rel:enemyOf <#spiderman> ;
    a foaf:Person ;    # in the context of the Marvel universe
    foaf:name "Green Goblin" .
<#spiderman>
    rel:enemyOf <#green-goblin> ;
    a foaf:Person ;
    foaf:name "Spiderman", "Человек-паук"@ru .

逗号(,)在“蜘蛛侠”与俄语单词之间的含义是什么?

另一个更重要的问题是:随着时间的推移,我怎样才能与城市和国家合作?例如:莱比锡属于DDR直到1990年。今天莱比锡是德国的一个城市。

1 个答案:

答案 0 :(得分:3)

这里似乎有两个非常独立的问题。一个是语法,另一个是建模。

对于语法问题,我建议查看Turtle - Terse RDF Triple Language。 Turtle指定三元组,在三元组的规范中需要三个实体。 .指定三元组的结束。作为一种捷径,;表示当前的主题被转移到下一个三重规范 - 因此只需要指定谓词和对象。 ,表示主题对象会转移到下一个三元组。因此,

<#spiderman> foaf:name "Spiderman", "Человек-паук"@ru .

指定两个三元组:

<#spiderman> foaf:name "Spiderman" .
<#spiderman> foaf:name "Человек-паук"@ru .

一个建模问题,要指定莱比锡在不同时期的不同国家化,请指定属性,例如具有isMemberOfCountryfromDate属性的toDate。然后将填充每个国家/地区成员实例:

@prefix ex: <http://example.org/geoex/> 
ex:Leipzig
  ex:isMemberOfCountry [
      ex:country ex:DDR ;
      ex:fromDate 1945 ;
      ex:toDate 1990 ;
    ] ;
  ex:isMemberOfCountry [
      ex:country ex:Germany ;
      ex:fromDate 1990 ;
    ] .

使用Bnodes确保数据集中的唯一名称,对于名称可能无关紧要的对象(如果有,则指定用于代替bnode的对象)。然后要查询当前国家/地区,请使用:

SELECT ?country
WHERE {
   ex:Leipzig ex:isMemberOfCountry ?member .
   ?member ex:country ?country .
   FILTER NOT EXISTS {
      ?member ex:toDate ?d
   }
}

要查找特定年份的会员资格,请使用以下内容:

SELECT ?country
WHERE {
 BIND("1991"^^xsd:integer AS ?date) #placeholder - ?date should be passed into the query
    ex:Leipzig ex:isMemberOfCountry ?member .
    ?member ex:country ?country .
    ?member ex:fromDate ?fdate .
    OPTIONAL {?member ex:toDate ?td}
    BIND(IF(bound(?td), ?td, year(now())) AS ?edate)
    FILTER (?date >= ?fdate && ?date <= ?edate)
}

请注意,将?date绑定到1990将导致两个结果,这是正确的,因为在此示例模型中使用年份而不是日期。