【译】Understanding Linked Data Formats
在本文中,我們將通過檢查其四種最常見的格式來探索RDF的外觀:N-Triples,Turtle,JSON-LD和RDF / XML。
編輯(04/05/2019):我將本文擴展為包含JSON-LD并添加了下面的內容部分。 我原本沒有包含JSON-LD,因為我從未真正使用它,但同意需要添加它才能完整。內容
介紹
格式看起來像什么?
哪種格式適合我?
結論
TL; DR
附錄
介紹
很簡單,鏈接數據存儲為由主題,謂詞和對象組成的三元組。 這些三元組將實體連接到其他實體或文字(稍后將詳細介紹)以創建有向知識圖:
http://www27.cs.kobe-u.ac.jp/achieve/data/pdf/1285.pdf
在這個例子中我們可以看到東京位于日本國家,面積為2188平方公里。 實體(東京和日本)和謂詞各自具有URI以便以機器可讀格式標識它們。 然而,矩形中的區域不是所謂的文字(常數值),我們將在后面詳細討論。
格式看起來像什么?
RDF通常以四種格式之一存儲:N-Triples(.nt),Turtle(.ttl),JSON-LD(.json)或RDF / XML(.rdf)。 您使用的主要是優先級,因為所有這些格式都受到主RDF庫和三重存儲的支持。 然而,確實存在優點和缺點,我將在本文后面重點介紹。
的N-Triples
將RDF存儲和讀取為N-Triples非常簡單,因為.nt文件的每一行都是一個三元組(<subject> <predicate> <object>),它們共同形成一個有向知識圖:
與本文開頭的小示例類似,圓圈表示實體,矩形表示文字,箭頭表示謂詞。 這個知識圖與11個連接以N-Triples格式表示如下:
注意:灰色數字僅用于說明目的: NOT N-Triples
注意:每個示例的代碼塊都可以在附錄中找到這里有11個三元組,包含從DBpedia中提取的Bob Marley和Jamaica的信息 - 維基百科的鏈接數據表示。 為了便于說明,我將彩色實體設置為紅色,謂詞為紫色,文字為綠色和文字標簽以及數據類型為橙色。
我們可以從第一個三元組看到Bob Marley是Person類型,我們使用foaf(朋友的朋友)本體作為這種類型的URI。 使用像foaf這樣的標準本體可以輕松地與我在上一篇文章中討論過的其他鏈接數據集成。 第二個和第三個三元組有標準謂詞,但有字符串作為主題,稱為文字。 在DBpedia中,URI是人類可讀的,但情況并非總是如此,因此人類可讀標簽附加到實體。 這兩個文字在@符號后附加了語言標簽。 在這兩個例子中,“Bob Marley”在英語和法語中是相同的,而你可以看到,如果你看第八個三聯,牙買加的意大利語就不同了。 這些字符串文字通常被稱為“ 普通文字 ”而不是“類型文字”,我將在下面解釋。
本例中的第五個三聯將Bob Marley的實體與其出生地牙買加的實體聯系起來。 從后面的三元組中可以看出,對象可以是主體(甚至謂詞可以是主體或對象)來創建所需的知識圖。 您會注意到第九個和第十個三元組中的類型文字是數字并且具有附加類型(因此名稱為文字),在本例中為float。 這通常用于確保數字有效,例如年齡通常是整數。 最后,在第十一屆三聯中,我們可以看到foaf本體再次用于將牙買加實體與其主頁URL(URI的子集)連接起來。
龜
讀取(作為人類)Turtle格式的RDF要容易得多,因為您可以在.ttl文件的開頭定義前綴,縮短每個三元組。 烏龜的另一個特點是具有相同主題的多個三元組被分組為塊(例如,Bob Marley的URI不會被重復列出),例如:
這代表與上面的N-Triples完全相同的知識圖。 在頂部,定義了前綴,以便URI的長重復部分可以用它們的簡短形式寫出。 例如線
@prefix foaf:< http://xmlns.com/foaf/0.1/ >。讓字符串foaf代表http://xmlns.com/foaf/0.1/ 。 這允許主題<http://xmlns.com/foaf/0.1/Person>縮短為foaf:Person 。
一個獨特的縮寫是謂詞<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ,它很常見,只用字母a 。 因此,N-Triple
< http://dbpedia.org/resource/Bob_Marley > < http://www.w3.org/1999/02/22-rdf-syntax-ns#type > < http://xmlns.com/foaf/0.1 /人 >。可以縮短龜到
dbr:Bob_Marley a foaf:人這更清楚了。
您可以看到有關Bob Marley和Jamaica的數據被分成不同的塊。 這種分組以及定義的前綴使得Turtle格式比N-Triples更容易理解。 如果您注意到,主題的相關信息用分號分隔,并以完整句點和換行符結束,以表示新主題。
JSON-LD
接下來我們有JSON-LD這是一種較舊的格式,因為它將鏈接數據適合現有格式--JSON。 自創建以來,創建了更具人性化的Turtle,但我將在本文后面更詳細地比較它們。
我再次用顏色協調這個代表相同知識圖的例子:
為清楚起見,我將JSON對象稱為“塊”,以避免JSON對象與鏈接數據對象(主題,謂詞,對象)之間的混淆。每個實體(紅色)都在頂層聲明。 這就是為什么Bob Marley和Jamaica塊中的實體再次在.json文件的末尾聲明。
在頂級聲明中,實體使用@type連接到它們的類型, @type表示<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>就像在Turtle中做的那樣。 實體還連接到這些頂級塊中的文字和其他實體。 由于JSON是分層的,因此文字也包含在其語言標記或類型旁邊的塊中。
RDF / XML
最古老的RDF格式是RDF / XML,它不再常用,但由于這一事實仍然是標準的。 同樣,這里是RDF / XML,代表與上面的N-Triples,Turtle和JSON-LD完全相同的知識圖。
與Turtle一樣,可以在RDF / XML文件的頂部定義前綴,以避免不必要的URI重復。 然而,正如我們所看到的,RDF / XML仍然不像Turtle那樣具有人類可讀性,但在選擇應存儲RDF的格式之前,需要考慮一些因素。
哪種格式適合我?
看起來似乎總是將鏈接數據存儲在更漂亮(最人性化的)Turtle格式中,但正如我上面提到的,使用上述每種格式都有優點和缺點。
RDF / XML:
如前所述,RDF / XML是第一個創建的RDF格式,因此被認為是標準格式。 這意味著默認情況下,大多數RDF庫和三元組以此格式輸出RDF。
如果您想使用舊版RDF系統或想要使用XML庫來操作數據(因為RDF / XML是有效的XML),那么RDF / XML應該是您使用的格式。
但是,這種格式是為了嘗試以舊格式存儲新數據結構而創建的。 因此,由于其他較新的RDF格式的優點,RDF / XML不受歡迎。 如果您使用的是新的triplestore,則無法加載RDF / XML。
JSON-LD:
與RDF / XML類似,JSON-LD試圖將新數據結構存儲到現有格式中。
因此,優點是類似的,因為JSON-LD是有效的JSON,這意味著您可以使用許多標準JSON庫來操作它。
然而,這種格式再次受歡迎,因此較新的三重商店甚至不支持加載它。
龜:
Turtle在許多方面類似于RDF / XML,但是非常簡單,更好看。 如果您的RDF在任何時候都是由人類閱讀的,那么最好將您的RDF以Turtle格式存儲,因為所有的“混亂”都被刪除了。 缺乏“混亂”也使得Turtle成為首選的格式,如果帶寬是一個問題。
所有現代RDF庫和三重存儲都可以使用Turtle RDF,因為在Turtle文件的開頭和結尾沒有開放和關閉行(與RDF / XML不同),數據可以按塊流式傳輸。 今天的系統通常需要實時數據流或通過API請求數據,因此必須考慮流式鏈接數據的能力。
的N-Triples:
N-Triples很簡單,每一行由一個主題,謂詞和一個由空格分隔并以句點結尾的對象組成。 這使得N-Triples非常容易解析并且像Turtle一樣,所有現代RDF庫和三重存儲都可以與N-Triples一起使用。
N-Triples可能看起來很昂貴,但這種極端的冗長,使它們很容易解析,有助于現代壓縮技術。 因此,存儲為N-Triples的RDF可以實現高效的壓縮比。
如上所述,Turtle可以在塊中流式傳輸。 然而,N-Triples可以逐行流式傳輸,這使得它更加強大。 如果N-Triples文件的一行丟失,則丟失一個三元組...然而,在Turtle文件中,整個塊丟失,可能是數千個三元組。
同樣,如果您重新排列N-Triple文件中的行,則您的文件仍然有效,并且三元組表示的知識圖表不受影響。 但是,如果對Turtle文件執行此操作,則RDF將變為無效。 如果您希望有效地處理多個傳入流或API響應,則會出現此問題。 如果您的系統正在處理N-Triples,您可以在收到第一行后立即處理您的數據。
結論:
我們已經探索了三種主要的RDF格式,并概述了如何決定使用哪種格式。 在我的下一篇文章中,我將介紹如何將數據從csv轉換為RDF 。
TL; DR:
三元組由三部分組成:主語,謂語和賓語。
 這些結合起來創建了一個有向知識圖。
 實體由URI表示。
對象可以保存關于其主題的信息(常量值),這些被稱為文字。
 純文字是可以選擇附加標簽的字符串(例如語言標簽)
 類型文字附加了數據類型(例如具有附加整數數據類型的數字)
如果您使用舊系統,則以RDF / XML格式存儲RDF。
 如果您希望您的RDF具有人類可讀性或擔心帶寬,請將您的RDF存儲為Turtle格式。
 否則將您的RDF存儲為N-Triples(這是我們經常流式傳輸時在Wallscope中轉到RDF格式)。
附錄:
每個例子都可以在這里找到:
的N-Triples
<http://dbpedia.org/resource/Bob_Marley> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1 /人>。 <http://dbpedia.org/resource/Bob_Marley> <http://www.w3.org/2000/01/rdf-schema#label>“Bob Marley”@en。 <http://dbpedia.org/resource/Bob_Marley> <http://www.w3.org/2000/01/rdf-schema#label>“Bob Marley”@fr。 <http://dbpedia.org/resource/Bob_Marley> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://dbpedia.org/resource/Rastafari>。 <http://dbpedia.org/resource/Bob_Marley> <http://dbpedia.org/ontology/birthPlace> <http://dbpedia.org/resource/Jamaica>。 <http://dbpedia.org/resource/Jamaica> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Country>。 <http://dbpedia.org/resource/Jamaica> <http://www.w3.org/2000/01/rdf-schema#label>“牙買加”。 <http://dbpedia.org/resource/Jamaica> <http://www.w3.org/2000/01/rdf-schema#label>“Giamaica”@it。 <http://dbpedia.org/resource/Jamaica> <http://www.w3.org/2003/01/geo/wgs84_pos#lat>“17.9833”^^ <http://www.w3.org/ 2001 / XMLSchema #float>。 <http://dbpedia.org/resource/Jamaica> <http://www.w3.org/2003/01/geo/wgs84_pos#long>“ - 76.8”^^ <http://www.w3.org / 2001 / XMLSchema #float>。 <http://dbpedia.org/resource/Jamaica> <http://xmlns.com/foaf/0.1/homepage> <http://jis.gov.jm/>。龜
@prefix dbr:<http://dbpedia.org/resource/>。 @prefix dbo:<http://dbpedia.org/ontology/>。 @prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>。 @prefix foaf:<http://xmlns.com/foaf/0.1/>。 @prefix geo:<http://www.w3.org/2003/01/geo/wgs84_pos#>。 @prefix xsd:<http://www.w3.org/2001/XMLSchema#>。 @prefix schema:<http://schema.org/>。 DBR:Bob_Marley 一個人:人; rdfs:標簽“Bob Marley”@en; rdfs:label“Bob Marley”@fr; rdfs:seeAlso dbr:Rastafari; dbo:birthPlace dbr:牙買加。 DBR:牙買加 架構:國家; rdfs:標簽“牙買加”@en; rdfs:標簽“Giamaica”@it; geo:lat“17.9833”^^ xsd:float; geo:long“-76.8”^^ xsd:float; foaf:主頁<http://jis.gov.jm/>。JSON-LD
[ { “ @id ”:“ http://dbpedia.org/resource/Bob_Marley ”, “ @type ”:[ “ http://xmlns.com/foaf/0.1/Person ” ] “ http://www.w3.org/2000/01/rdf-schema#label ”:[ { “ @value ”:“Bob Marley”, “ @language ”:“en” }, { “ @value ”:“Bob Marley”, “ @language ”:“fr” } ] “ http://www.w3.org/2000/01/rdf-schema#seeAlso ”:[ { “ @id ”:“ http://dbpedia.org/resource/Rastafari ” } ] “ http://dbpedia.org/ontology/birthPlace ”:[ { “ @id ”:“ http://dbpedia.org/resource/Jamaica ” } ] }, { “ @id ”:“ http://dbpedia.org/resource/Jamaica ”, “ @type ”:[ “ http://schema.org/Country ” ] “ http://www.w3.org/2000/01/rdf-schema#label ”:[ { “ @value ”:“牙買加”, “ @language ”:“en” }, { “ @value ”:“Giamaica”, “ @language ”:“它” } ] “ http://www.w3.org/2003/01/geo/wgs84_pos#lat ”:[ { “@value”:“17.9833”, “ @type ”:“ http://www.w3.org/2001/XMLSchema#float ” } ] “ http://www.w3.org/2003/01/geo/wgs84_pos#long ”:[ { “@value”:“ - 76.8”, “ @type ”:“ http://www.w3.org/2001/XMLSchema#float ” } ] “ http://xmlns.com/foaf/0.1/homepage ”:[ { “ @id ”:“ http://jis.gov.jm/ ” } ] }, { “ @id ”:“ http://dbpedia.org/resource/Rastafari ” }, { “ @id ”:“ http://jis.gov.jm/ ” }, { “ @id ”:“ http://schema.org/Country ” }, { “ @id ”:“ http://xmlns.com/foaf/0.1/Person ” } ]RDF / XML
<?xml version =“1.0”encoding =“utf-8”?> <rdf:RDF xmlns:rdf =“http://www.w3.org/1999/02/22-rdf-syntax-ns#” 的xmlns:FOAF = “http://xmlns.com/foaf/0.1/” 的xmlns:RDFS = “http://www.w3.org/2000/01/rdf-schema#” 的xmlns:NS0 = “http://dbpedia.org/ontology/” 的xmlns:架構= “http://schema.org/” 的xmlns:地理= “http://www.w3.org/2003/01/geo/wgs84_pos#”> <foaf:Person rdf:about =“http://dbpedia.org/resource/Bob_Marley”> <rdfs:label xml:lang =“en”> Bob Marley </ rdfs:label> <rdfs:label xml:lang =“fr”> Bob Marley </ rdfs:label> <rdfs:seeAlso rdf:resource =“http://dbpedia.org/resource/Rastafari”/> <NS0:出生地> <schema:Country rdf:about =“http://dbpedia.org/resource/Jamaica”> <rdfs:label xml:lang =“en”>牙買加</ rdfs:label> <rdfs:label xml:lang =“it”> Giamaica </ rdfs:label> <geo:lat rdf:datatype =“http://www.w3.org/2001/XMLSchema#float”> 17.9833 </ geo:lat> <geo:long rdf:datatype =“http://www.w3.org/2001/XMLSchema#float”> -76.8 </ geo:long> <foaf:homepage rdf:resource =“http://jis.gov.jm/”/> </模式:國家> </ NS0:出生地> </ FOAF:人> </ RDF:RDF>?
https://medium.com/wallscope/understanding-linked-data-formats-rdf-xml-vs-turtle-vs-n-triples-eb931dbe9827
總結
以上是生活随笔為你收集整理的【译】Understanding Linked Data Formats的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 项目管理平台(总结篇一)
 - 下一篇: 网站架构相关PPT、文章整理(更新于20