【译】Understanding Linked Data Formats
在本文中,我們將通過檢查其四種最常見的格式來探索RDF的外觀:N-Triples,Turtle,JSON-LD和RDF / XML。
編輯(04/05/2019):我將本文擴(kuò)展為包含JSON-LD并添加了下面的內(nèi)容部分。 我原本沒有包含JSON-LD,因?yàn)槲覐奈凑嬲褂盟?#xff0c;但同意需要添加它才能完整。內(nèi)容
介紹
格式看起來像什么?
哪種格式適合我?
結(jié)論
TL; DR
附錄
介紹
很簡單,鏈接數(shù)據(jù)存儲(chǔ)為由主題,謂詞和對象組成的三元組。 這些三元組將實(shí)體連接到其他實(shí)體或文字(稍后將詳細(xì)介紹)以創(chuàng)建有向知識(shí)圖:
http://www27.cs.kobe-u.ac.jp/achieve/data/pdf/1285.pdf
在這個(gè)例子中我們可以看到東京位于日本國家,面積為2188平方公里。 實(shí)體(東京和日本)和謂詞各自具有URI以便以機(jī)器可讀格式標(biāo)識(shí)它們。 然而,矩形中的區(qū)域不是所謂的文字(常數(shù)值),我們將在后面詳細(xì)討論。
格式看起來像什么?
RDF通常以四種格式之一存儲(chǔ):N-Triples(.nt),Turtle(.ttl),JSON-LD(.json)或RDF / XML(.rdf)。 您使用的主要是優(yōu)先級(jí),因?yàn)樗羞@些格式都受到主RDF庫和三重存儲(chǔ)的支持。 然而,確實(shí)存在優(yōu)點(diǎn)和缺點(diǎn),我將在本文后面重點(diǎn)介紹。
的N-Triples
將RDF存儲(chǔ)和讀取為N-Triples非常簡單,因?yàn)?nt文件的每一行都是一個(gè)三元組(<subject> <predicate> <object>),它們共同形成一個(gè)有向知識(shí)圖:
與本文開頭的小示例類似,圓圈表示實(shí)體,矩形表示文字,箭頭表示謂詞。 這個(gè)知識(shí)圖與11個(gè)連接以N-Triples格式表示如下:
注意:灰色數(shù)字僅用于說明目的: NOT N-Triples
注意:每個(gè)示例的代碼塊都可以在附錄中找到這里有11個(gè)三元組,包含從DBpedia中提取的Bob Marley和Jamaica的信息 - 維基百科的鏈接數(shù)據(jù)表示。 為了便于說明,我將彩色實(shí)體設(shè)置為紅色,謂詞為紫色,文字為綠色和文字標(biāo)簽以及數(shù)據(jù)類型為橙色。
我們可以從第一個(gè)三元組看到Bob Marley是Person類型,我們使用foaf(朋友的朋友)本體作為這種類型的URI。 使用像foaf這樣的標(biāo)準(zhǔn)本體可以輕松地與我在上一篇文章中討論過的其他鏈接數(shù)據(jù)集成。 第二個(gè)和第三個(gè)三元組有標(biāo)準(zhǔn)謂詞,但有字符串作為主題,稱為文字。 在DBpedia中,URI是人類可讀的,但情況并非總是如此,因此人類可讀標(biāo)簽附加到實(shí)體。 這兩個(gè)文字在@符號(hào)后附加了語言標(biāo)簽。 在這兩個(gè)例子中,“Bob Marley”在英語和法語中是相同的,而你可以看到,如果你看第八個(gè)三聯(lián),牙買加的意大利語就不同了。 這些字符串文字通常被稱為“ 普通文字 ”而不是“類型文字”,我將在下面解釋。
本例中的第五個(gè)三聯(lián)將Bob Marley的實(shí)體與其出生地牙買加的實(shí)體聯(lián)系起來。 從后面的三元組中可以看出,對象可以是主體(甚至謂詞可以是主體或?qū)ο?#xff09;來創(chuàng)建所需的知識(shí)圖。 您會(huì)注意到第九個(gè)和第十個(gè)三元組中的類型文字是數(shù)字并且具有附加類型(因此名稱為文字),在本例中為float。 這通常用于確保數(shù)字有效,例如年齡通常是整數(shù)。 最后,在第十一屆三聯(lián)中,我們可以看到foaf本體再次用于將牙買加實(shí)體與其主頁URL(URI的子集)連接起來。
龜
讀取(作為人類)Turtle格式的RDF要容易得多,因?yàn)槟梢栽?ttl文件的開頭定義前綴,縮短每個(gè)三元組。 烏龜?shù)牧硪粋€(gè)特點(diǎn)是具有相同主題的多個(gè)三元組被分組為塊(例如,Bob Marley的URI不會(huì)被重復(fù)列出),例如:
這代表與上面的N-Triples完全相同的知識(shí)圖。 在頂部,定義了前綴,以便URI的長重復(fù)部分可以用它們的簡短形式寫出。 例如線
@prefix foaf:< http://xmlns.com/foaf/0.1/ >。讓字符串foaf代表http://xmlns.com/foaf/0.1/ 。 這允許主題<http://xmlns.com/foaf/0.1/Person>縮短為foaf:Person 。
一個(gè)獨(dú)特的縮寫是謂詞<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 /人 >。可以縮短龜?shù)?/p> dbr:Bob_Marley a foaf:人
這更清楚了。
您可以看到有關(guān)Bob Marley和Jamaica的數(shù)據(jù)被分成不同的塊。 這種分組以及定義的前綴使得Turtle格式比N-Triples更容易理解。 如果您注意到,主題的相關(guān)信息用分號(hào)分隔,并以完整句點(diǎn)和換行符結(jié)束,以表示新主題。
JSON-LD
接下來我們有JSON-LD這是一種較舊的格式,因?yàn)樗鼘㈡溄訑?shù)據(jù)適合現(xiàn)有格式--JSON。 自創(chuàng)建以來,創(chuàng)建了更具人性化的Turtle,但我將在本文后面更詳細(xì)地比較它們。
我再次用顏色協(xié)調(diào)這個(gè)代表相同知識(shí)圖的例子:
為清楚起見,我將JSON對象稱為“塊”,以避免JSON對象與鏈接數(shù)據(jù)對象(主題,謂詞,對象)之間的混淆。每個(gè)實(shí)體(紅色)都在頂層聲明。 這就是為什么Bob Marley和Jamaica塊中的實(shí)體再次在.json文件的末尾聲明。
在頂級(jí)聲明中,實(shí)體使用@type連接到它們的類型, @type表示<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>就像在Turtle中做的那樣。 實(shí)體還連接到這些頂級(jí)塊中的文字和其他實(shí)體。 由于JSON是分層的,因此文字也包含在其語言標(biāo)記或類型旁邊的塊中。
RDF / XML
最古老的RDF格式是RDF / XML,它不再常用,但由于這一事實(shí)仍然是標(biāo)準(zhǔn)的。 同樣,這里是RDF / XML,代表與上面的N-Triples,Turtle和JSON-LD完全相同的知識(shí)圖。
與Turtle一樣,可以在RDF / XML文件的頂部定義前綴,以避免不必要的URI重復(fù)。 然而,正如我們所看到的,RDF / XML仍然不像Turtle那樣具有人類可讀性,但在選擇應(yīng)存儲(chǔ)RDF的格式之前,需要考慮一些因素。
哪種格式適合我?
看起來似乎總是將鏈接數(shù)據(jù)存儲(chǔ)在更漂亮(最人性化的)Turtle格式中,但正如我上面提到的,使用上述每種格式都有優(yōu)點(diǎn)和缺點(diǎn)。
RDF / XML:
如前所述,RDF / XML是第一個(gè)創(chuàng)建的RDF格式,因此被認(rèn)為是標(biāo)準(zhǔn)格式。 這意味著默認(rèn)情況下,大多數(shù)RDF庫和三元組以此格式輸出RDF。
如果您想使用舊版RDF系統(tǒng)或想要使用XML庫來操作數(shù)據(jù)(因?yàn)镽DF / XML是有效的XML),那么RDF / XML應(yīng)該是您使用的格式。
但是,這種格式是為了嘗試以舊格式存儲(chǔ)新數(shù)據(jù)結(jié)構(gòu)而創(chuàng)建的。 因此,由于其他較新的RDF格式的優(yōu)點(diǎn),RDF / XML不受歡迎。 如果您使用的是新的triplestore,則無法加載RDF / XML。
JSON-LD:
與RDF / XML類似,JSON-LD試圖將新數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)到現(xiàn)有格式中。
因此,優(yōu)點(diǎn)是類似的,因?yàn)镴SON-LD是有效的JSON,這意味著您可以使用許多標(biāo)準(zhǔn)JSON庫來操作它。
然而,這種格式再次受歡迎,因此較新的三重商店甚至不支持加載它。
龜:
Turtle在許多方面類似于RDF / XML,但是非常簡單,更好看。 如果您的RDF在任何時(shí)候都是由人類閱讀的,那么最好將您的RDF以Turtle格式存儲(chǔ),因?yàn)樗械摹盎靵y”都被刪除了。 缺乏“混亂”也使得Turtle成為首選的格式,如果帶寬是一個(gè)問題。
所有現(xiàn)代RDF庫和三重存儲(chǔ)都可以使用Turtle RDF,因?yàn)樵赥urtle文件的開頭和結(jié)尾沒有開放和關(guān)閉行(與RDF / XML不同),數(shù)據(jù)可以按塊流式傳輸。 今天的系統(tǒng)通常需要實(shí)時(shí)數(shù)據(jù)流或通過API請求數(shù)據(jù),因此必須考慮流式鏈接數(shù)據(jù)的能力。
的N-Triples:
N-Triples很簡單,每一行由一個(gè)主題,謂詞和一個(gè)由空格分隔并以句點(diǎn)結(jié)尾的對象組成。 這使得N-Triples非常容易解析并且像Turtle一樣,所有現(xiàn)代RDF庫和三重存儲(chǔ)都可以與N-Triples一起使用。
N-Triples可能看起來很昂貴,但這種極端的冗長,使它們很容易解析,有助于現(xiàn)代壓縮技術(shù)。 因此,存儲(chǔ)為N-Triples的RDF可以實(shí)現(xiàn)高效的壓縮比。
如上所述,Turtle可以在塊中流式傳輸。 然而,N-Triples可以逐行流式傳輸,這使得它更加強(qiáng)大。 如果N-Triples文件的一行丟失,則丟失一個(gè)三元組...然而,在Turtle文件中,整個(gè)塊丟失,可能是數(shù)千個(gè)三元組。
同樣,如果您重新排列N-Triple文件中的行,則您的文件仍然有效,并且三元組表示的知識(shí)圖表不受影響。 但是,如果對Turtle文件執(zhí)行此操作,則RDF將變?yōu)闊o效。 如果您希望有效地處理多個(gè)傳入流或API響應(yīng),則會(huì)出現(xiàn)此問題。 如果您的系統(tǒng)正在處理N-Triples,您可以在收到第一行后立即處理您的數(shù)據(jù)。
結(jié)論:
我們已經(jīng)探索了三種主要的RDF格式,并概述了如何決定使用哪種格式。 在我的下一篇文章中,我將介紹如何將數(shù)據(jù)從csv轉(zhuǎn)換為RDF 。
TL; DR:
三元組由三部分組成:主語,謂語和賓語。
這些結(jié)合起來創(chuàng)建了一個(gè)有向知識(shí)圖。
實(shí)體由URI表示。
對象可以保存關(guān)于其主題的信息(常量值),這些被稱為文字。
純文字是可以選擇附加標(biāo)簽的字符串(例如語言標(biāo)簽)
類型文字附加了數(shù)據(jù)類型(例如具有附加整數(shù)數(shù)據(jù)類型的數(shù)字)
如果您使用舊系統(tǒng),則以RDF / XML格式存儲(chǔ)RDF。
如果您希望您的RDF具有人類可讀性或擔(dān)心帶寬,請將您的RDF存儲(chǔ)為Turtle格式。
否則將您的RDF存儲(chǔ)為N-Triples(這是我們經(jīng)常流式傳輸時(shí)在Wallscope中轉(zhuǎn)到RDF格式)。
附錄:
每個(gè)例子都可以在這里找到:
的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 一個(gè)人:人; rdfs:標(biāo)簽“Bob Marley”@en; rdfs:label“Bob Marley”@fr; rdfs:seeAlso dbr:Rastafari; dbo:birthPlace dbr:牙買加。 DBR:牙買加 架構(gòu):國家; rdfs:標(biāo)簽“牙買加”@en; rdfs:標(biāo)簽“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:架構(gòu)= “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
總結(jié)
以上是生活随笔為你收集整理的【译】Understanding Linked Data Formats的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目管理平台(总结篇一)
- 下一篇: 网站架构相关PPT、文章整理(更新于20