知識圖譜基礎之三元組:Python RDFLib 實例入門


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

logo-rdflib

本節將簡要地帶您入門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的文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM