2016-04-02 70 views
2

我想用烏龜做一個RDF圖的文本表示。例如蜘蛛俠和綠色妖精之間的關係。看到這裏引用https://www.w3.org/TR/turtle/RDF與烏龜的文本表示

@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 . 

什麼逗號(,)「蜘蛛俠」與俄羅斯之間的字是什麼意思?

另一個更重要的問題是:隨着時間的推移,我怎麼能在一個城市和一個國家這樣做?例如:直到1990年,萊比錫才屬於DDR。今天,萊比錫是德國的一個城市。

+1

隨着時間的推移,你怎麼能跟一個城市和一個國家做什麼?這並不是很清楚你在追求什麼,或者你的「其他問題」與你的蜘蛛俠和綠色妖精的例子有什麼關係。 –

回答

3

在這裏看起來像兩個非常單獨的問題。一種是語法,一種是建模。

對於語法問題,我建議看看Turtle - Terse RDF Triple Language。烏龜指定三元組,這需要三個規範中的三個實體。 .指定三元組的結束。作爲一個快捷方式,;意味着當前的主題被帶到下一個三重規範 - 因此只需要指定謂詞和對象。 A ,意味着主題對象被轉移到下一個三元組。因此,

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

指定兩個三元組:

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

一個建模問題,以在不同的時間紀元指定萊比錫的不同國有化,指定屬性,如isMemberOfCountry具有的fromDate性質和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用於確保整個數據集的唯一名稱的對象,其名稱可能並不重要(如果確實如此,那麼指定對象的使用代替B節點的)。然後查詢當前的國家,使用方法:

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年將產生兩個結果,這鑑於在這個示例模型中使用年代而不是日期,這是正確的。

+0

好吧,這有很大的幫助,謝謝你的詳細信息。像isMemberOfCountry或country這樣的標籤或單詞是自由定義的標籤。哪些應該以邏輯方式使用? – Mchoeti

+2

這些詞不是「單詞」,而是URI - 對象。因此,考慮到上面的前綴定義,例如:isMemberOfCountry擴展爲。對我們在這裏發佈的RDF/Turtle文件的一些研究應該使這個更清楚。 – scotthenninger

+1

請注意,龜是W3C的建議:https://www.w3.org/TR/turtle/(您的鏈接是較舊的草稿) – unor