本文轉自https://freeaihub.com/article/start-rdf-with-rdflib-in-python.html,該頁可在線運行

本節將簡要地帶您入門Python中的RDF操作庫rdflib,三元組是一個在知識圖譜中重要的基礎性概念,通過在線安裝該庫,並在線運行兩個示例,來理解該庫的使用。理解本節的前提,您需要有Python基礎,RDF基礎。
什么是RDF?
RDF是W3C的資源描述框架(RDF)。RDF提供了一種表達數據圖並與其他人(可能更重要的是與機器)共享的標准方法。由於它是W3C“推薦”(通過任何其他措施得出的行業標准),因此圍繞RDF出現了大量工具和服務。
RDF的歷史可以追溯到1990年,當時 蒂姆·伯納斯·李(Tim Berners-Lee)撰寫了一項提案,文檔之間存在不同類型的鏈接,這使超文本更易於計算機自動理解。輸入的鏈接未包含在第一個HTML規范中,但在元內容框架(Meta Content Framework(MCF)),用於描述元數據和組織Web的系統,由 Ramanathan Guha於1990年代后期在Apple和Netscape任職時,由Tim Bray開發了XML表示形式。W3C一直在尋找通用的元數據表示形式,並且MCF中的許多想法都在1999年的第一個RDF W3C建議書中找到了自己的方法。此后,對標准進行了修訂,如今的軟件和工具反映了這些改進。
安裝RDFLib
RDFLib是開源的,並在GitHub存儲庫中維護 。PyPi列出了RDFLib的當前版本和先前版本
The best way to install RDFLib is to use pip3
!pip3 install rdflib -i https://pypi.tuna.tsinghua.edu.cn/simple/
它是如何工作
該軟件包使用了各種Python習慣用法,這些慣用法提供了將RDF引入以前從未使用過RDF的Python程序員的合適方法。
RDFLib公開的用於RDF的主要接口是 Graph。
RDFLib圖不是已排序的容器。它們具有普通set 操作(例如add()添加三元組)以及搜索三元組並以任意順序返回它們的方法。
RDFLib圖還重新定義了某些內置的Python方法,以便以可預測的方式運行。它們模擬容器類型,最好將其視為一組3項元組(在RDF中為“三元組”):
[
(subject0, predicate0, object0),
(subject1, predicate1, object1),
...
(subjectN, predicateN, objectN)
]
示例1:
import rdflib
# create a Graph
g = rdflib.Graph()
# parse in an RDF file hosted on the Internet
result = g.parse("http://www.w3.org/People/Berners-Lee/card")
# loop through each triple in the graph (subj, pred, obj)
for subj, pred, obj in g:
# check if there is at least one triple in the Graph
if (subj, pred, obj) not in g:
raise Exception("It better be!")
# print the number of "triples" in the Graph
print("graph has {} statements.".format(len(g)))
# prints graph has 86 statements.
# print out the entire Graph in the RDF Turtle format
print(g.serialize(format="turtle").decode("utf-8"))
在這里Graph創建了一個,然后在線創建了一個RDF文件,即Tim Berners-Lee的社交網絡詳細信息,並將其解析到該圖中。該print()語句使用該len()函數對圖中的三元組數進行計數。
示例2:
from rdflib import Graph, Literal, RDF, URIRef
# rdflib knows about some namespaces, like FOAF
from rdflib.namespace import FOAF , XSD
# create a Graph
g = Graph()
# Create an RDF URI node to use as the subject for multiple triples
donna = URIRef("http://example.org/donna")
# Add triples using store's add() method.
g.add((donna, RDF.type, FOAF.Person))
g.add((donna, FOAF.nick, Literal("donna", lang="ed")))
g.add((donna, FOAF.name, Literal("Donna Fales")))
g.add((donna, FOAF.mbox, URIRef("mailto:donna@example.org")))
# Add another person
ed = URIRef("http://example.org/edward")
# Add triples using store's add() method.
g.add((ed, RDF.type, FOAF.Person))
g.add((ed, FOAF.nick, Literal("ed", datatype=XSD.string)))
g.add((ed, FOAF.name, Literal("Edward Scissorhands")))
g.add((ed, FOAF.mbox, URIRef("mailto:e.scissorhands@example.org")))
# Iterate over triples in store and print them out.
print("--- printing raw triples ---")
for s, p, o in g:
print((s, p, o))
# For each foaf:Person in the store, print out their mbox property's value.
print("--- printing mboxes ---")
for person in g.subjects(RDF.type, FOAF.Person):
for mbox in g.objects(person, FOAF.mbox):
print(mbox)
# Bind the FOAF namespace to a prefix for more readable output
g.bind("foaf", FOAF)
# print all the data in the Notation3 format
print("--- printing mboxes ---")
print(g.serialize(format='n3').decode("utf-8"))
通過本節您應該可以完成rdflib庫的安裝並成功在線運行兩個示例,后續會有關於更多的關於rdflib的文章。
