RDF 与 turtle 的文本表示
Text Representation of RDF with turtle
我想用 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 .
"Spiderman" 和俄语单词之间的逗号 (,
) 是什么意思?
另一个更重要的问题是:随着时间的推移,我怎样才能对一个城市和一个国家做到这一点?例如:莱比锡在1990年之前属于东德。今天莱比锡是德国的一个城市。
这里似乎是两个截然不同的问题。一篇关于语法,一篇关于建模。
对于语法问题,我建议查看 Turtle - Terse RDF Triple Language。 Turtle 指定三元组,这需要在三元组的规范中包含三个实体。 .
指定三元组的结尾。作为一种快捷方式,;
意味着当前的 subject 被转移到下一个三重规范 - 因此只需要指定谓词和宾语。 ,
意味着 subject 和 object 被带到下一个三元组。因此,
<#spiderman> foaf:name "Spiderman", "Человек-паук"@ru .
指定两个三元组:
<#spiderman> foaf:name "Spiderman" .
<#spiderman> foaf:name "Человек-паук"@ru .
一个建模问题,要指定莱比锡在不同时期的不同国有化,请指定一个 属性,例如具有 fromDate
和 [= 属性的 isMemberOfCountry
20=]。然后将填充国家/地区成员资格的每个实例:
@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 将产生两个结果,这是正确的,因为在此示例模型中使用的是年份而不是日期。
我想用 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 .
"Spiderman" 和俄语单词之间的逗号 (,
) 是什么意思?
另一个更重要的问题是:随着时间的推移,我怎样才能对一个城市和一个国家做到这一点?例如:莱比锡在1990年之前属于东德。今天莱比锡是德国的一个城市。
这里似乎是两个截然不同的问题。一篇关于语法,一篇关于建模。
对于语法问题,我建议查看 Turtle - Terse RDF Triple Language。 Turtle 指定三元组,这需要在三元组的规范中包含三个实体。 .
指定三元组的结尾。作为一种快捷方式,;
意味着当前的 subject 被转移到下一个三重规范 - 因此只需要指定谓词和宾语。 ,
意味着 subject 和 object 被带到下一个三元组。因此,
<#spiderman> foaf:name "Spiderman", "Человек-паук"@ru .
指定两个三元组:
<#spiderman> foaf:name "Spiderman" .
<#spiderman> foaf:name "Человек-паук"@ru .
一个建模问题,要指定莱比锡在不同时期的不同国有化,请指定一个 属性,例如具有 fromDate
和 [= 属性的 isMemberOfCountry
20=]。然后将填充国家/地区成员资格的每个实例:
@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 将产生两个结果,这是正确的,因为在此示例模型中使用的是年份而不是日期。