正文之前
本文有很多的參考來源,就不一一列舉了胎署。除了少部分自己寫的吆录,其他的都是從別的地方拼湊來的。但求不噴琼牧,不圖啥恢筝,就做個筆記哀卫。
正文
一、知識圖譜的基石:RDF
RDF(Resource Description Framework)撬槽,即資源描述框架此改,其本質(zhì)是一個數(shù)據(jù)模型(Data Model)。它提供了一個統(tǒng)一的標(biāo)準(zhǔn)侄柔,用于描述實體/資源共啃。簡單來說,就是表示事物的一種方法和手段暂题。RDF形式上表示為SPO三元組移剪,有時候也稱為一條語句(statement),知識圖譜中我們也稱其為一條知識薪者,如下圖纵苛。
RDF由節(jié)點和邊組成,節(jié)點表示實體/資源言津、屬性攻人,邊則表示了實體和實體之間的關(guān)系以及實體和屬性的關(guān)系。在第一篇文章中(為什么需要知識圖譜纺念?什么是知識圖譜贝椿?——KG的前世今生),我們結(jié)合羅納爾多的例子陷谱,介紹了RDF節(jié)點和邊的類型約束烙博,這里不再贅述。對RDF不熟悉的讀者烟逊,可以參考第一篇文章渣窜,里面有更直觀的描述和解釋。
RDF序列化方法
RDF的表示形式和類型有了宪躯,那我們?nèi)绾蝿?chuàng)建RDF數(shù)據(jù)集乔宿,將其序列化(Serialization)呢?換句話說访雪,就是我們怎么存儲和傳輸RDF數(shù)據(jù)详瑞??目前臣缀,RDF序列化的方式主要有:RDF/XML坝橡,N-Triples,Turtle精置,RDFa计寇,JSON-LD等幾種。
- RDF/XML
就是用XML的格式來表示RDF數(shù)據(jù)
XML的技術(shù)比較成熟,有許多現(xiàn)成的工具來存儲和解析XML
對于RDF來說番宁,XML的格式太冗長元莫,也不便于閱讀,通常我們不會使用這種方式來處理RDF數(shù)據(jù)
- N-Triples
用多個三元組來表示RDF數(shù)據(jù)集蝶押,是最直觀的表示方法
在文件中踱蠢,每一行表示一個三元組,方便機器解析和處理
開放領(lǐng)域知識圖譜DBpedia通常是用這種格式來發(fā)布數(shù)據(jù)的
-
[圖片上傳失敗...(image-83bedb-1542118496557)]
- Turtle
應(yīng)該是使用得最多的一種RDF序列化方式了
比RDF/XML緊湊播聪,且可讀性比N-Triples好
-
[圖片上傳失敗...(image-594661-1542118496557)]
- RDFa
The Resource Description Framework in Attributes 是HTML5的一個擴展
在不改變?nèi)魏物@示效果的情況下朽基,讓網(wǎng)站構(gòu)建者能夠在頁面中標(biāo)記實體布隔,像人物离陶、地點、時間衅檀、評論等等
將RDF數(shù)據(jù)嵌入到網(wǎng)頁中招刨,搜索引擎能夠更好的解析非結(jié)構(gòu)化頁面,獲取一些有用的結(jié)構(gòu)化信息
- JSON-LD
JSON for Linking Data
鍵值對的方式來存儲RDF數(shù)據(jù)
示例
from [https://json-ld.org/](https://json-ld.org/)
{
"@context": "[https://json-ld.org/contexts/person.jsonld](https://json-ld.org/contexts/person.jsonld)",
"@id": "[http://dbpedia.org/resource/John_Lennon](http://dbpedia.org/resource/John_Lennon)",
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "[http://dbpedia.org/resource/Cynthia_Lennon](http://dbpedia.org/resource/Cynthia_Lennon)"
}
RDF的表達(dá)能力
RDF是對具體事物的描述哀军,缺乏抽象能力沉眶,無法對同一個類別的事物進(jìn)行定義和描述。就以羅納爾多這個知識圖為例杉适,RDF能夠表達(dá)羅納爾多和里約熱內(nèi)盧這兩個實體具有哪些屬性谎倔,以及它們之間的關(guān)系。但如果我們想定義羅納爾多是人猿推,里約熱內(nèi)盧是地點片习,并且人具有哪些屬性,地點具有哪些屬性蹬叭,人和地點之間存在哪些關(guān)系藕咏,這個時候RDF就表示無能為力了。不論是在智能的概念上秽五,還是在現(xiàn)實的應(yīng)用當(dāng)中孽查,這種泛化抽象能力都是相當(dāng)重要的;同時坦喘,這也是知識圖譜本身十分強調(diào)的盲再。RDFS和OWL這兩種技術(shù)或者說模式語言/本體語言(schema/ontology language)解決了RDF表達(dá)能力有限的困境。
二瓣铣、RDF的“衣服”——RDFS/OWL
之所以說RDFS/OWL是RDF的“衣服”答朋,因為它們都是用來描述RDF數(shù)據(jù)的。為了不顯得這么抽象坯沪,我們可以用關(guān)系數(shù)據(jù)庫中的概念進(jìn)行類比绿映。用過Mysql的讀者應(yīng)該知道,其database也被稱作schema。這個schema和我們這里提到的schema language十分類似叉弦。我們可以認(rèn)為數(shù)據(jù)庫中的每一張表都是一個類(Class)丐一,表中的每一行都是該類的一個實例或者對象(學(xué)過java等面向?qū)ο蟮木幊陶Z言的讀者很容易理解)。表中的每一列就是這個類所包含的屬性淹冰。如果我們是在數(shù)據(jù)庫中來表示人和地點這兩個類別库车,那么為他們分別建一張表就行了;再用另外一張表來表示人和地點之間的關(guān)系樱拴。RDFS/OWL本質(zhì)上是一些預(yù)定義詞匯(vocabulary)構(gòu)成的集合柠衍,用于對RDF進(jìn)行類似的類定義及其屬性的定義。
Notice: RDFS/OWL序列化方式和RDF沒什么不同晶乔,其實在表現(xiàn)形式上珍坊,它們就是RDF。其常用的方式主要是RDF/XML正罢,Turtle阵漏。另外,通常我們用小寫開頭的單詞或詞組來表示屬性翻具,大寫開頭的表示類履怯。數(shù)據(jù)屬性(data property,實體和literal字面量的關(guān)系)通常由名詞組成裆泳,而對象數(shù)據(jù)(object property叹洲,實體和實體之間的關(guān)系)通常由動詞(has,is之類的)加名詞組成工禾。剩下的部分符合駝峰命名法运提。為了將它們表示得更清楚,避免讀者混淆帜篇,之后我們都會默認(rèn)這種命名方式糙捺。讀者實踐過程中命名方式?jīng)]有強制要求,但最好保持一致笙隙。
輕量級的模式語言——RDFS
RDFS洪灯,即“Resource Description Framework Schema”,是最基礎(chǔ)的模式語言竟痰。還是以羅納爾多知識圖為例签钩,我們在概念、抽象層面對RDF數(shù)據(jù)進(jìn)行定義坏快。下面的RDFS定義了人和地點這兩個類铅檩,及每個類包含的屬性。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .
### 這里我們用詞匯rdfs:Class定義了“人”和“地點”這兩個類莽鸿。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .
### 這里我們用詞匯rdfs:Class定義了“人”和“地點”這兩個類昧旨。
:Person rdf:type rdfs:Class.
:Place rdf:type rdfs:Class.
### rdfs當(dāng)中不區(qū)分?jǐn)?shù)據(jù)屬性和對象屬性拾给,詞匯rdf:Property定義了屬性,即RDF的“邊”兔沃。
:chineseName rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:string .
:career rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:string .
:fullName rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:string .
:birthDate rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:date .
:height rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:int .
:weight rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:int .
:nationality rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range xsd:string .
:hasBirthPlace rdf:type rdf:Property;
rdfs:domain :Person;
rdfs:range :Place .
:address rdf:type rdf:Property;
rdfs:domain :Place;
rdfs:range xsd:string .
:coordinate rdf:type rdf:Property;
rdfs:domain :Place;
rdfs:range xsd:string .
我們這里只介紹RDFS幾個比較重要蒋得,常用的詞匯:
1. rdfs:Class. 用于定義類。
2. rdfs:domain. 用于表示該屬性屬于哪個類別乒疏。
3. rdfs:range. 用于描述該屬性的取值類型额衙。
4. rdfs:subClassOf. 用于描述該類的父類。比如怕吴,我們可以定義一個運動員類窍侧,聲明該類是人的子類。
5. rdfs:subProperty. 用于描述該屬性的父屬性转绷。比如伟件,我們可以定義一個名稱屬性,聲明中文名稱和全名是名稱的子類暇咆。
其實rdf:Property和rdf:type也是RDFS的詞匯锋爪,因為RDFS本質(zhì)上就是RDF詞匯的一個擴展。我們在這里不羅列進(jìn)去爸业,是不希望讀者混淆。RDFS其他的詞匯及其用法請參考W3C官方文檔亏镰。
為了讓讀者更直觀地理解RDF和RDFS/OWL在知識圖譜中所代表的層面扯旷,我們用下面的圖來表示例子中的數(shù)據(jù)層和模式層。
Data層是我們用RDF對羅納爾多知識圖的具體描述索抓,Vocabulary是我們自己定義的一些詞匯(類別钧忽,屬性),RDF(S)則是預(yù)定義詞匯逼肯。從下到上是一個具體到抽象的過程耸黑。圖中我們用紅色圓角矩形表示類,綠色字體表示rdf:type篮幢,rdfs:domain大刊,rdfs:range三種預(yù)定義詞匯,虛線表示rdf:type這種所屬關(guān)系三椿。另外缺菌,為了減少圖中連線的交叉,我們只保留了career這一個屬性的rdf:type所屬關(guān)系搜锰,省略了其他屬性的此關(guān)系伴郁。
我的理解:
rdf:type 即說明出發(fā)點是目的地的一種。也就代表了 是...的類型的關(guān)系
rdf:domain 說明出發(fā)點是目的地的一種屬性蛋叼。也就代表了 是....的一種屬性的意思
rdf:range 說明該屬性的取值類型焊傅。 也就代表了 是...的值的關(guān)系
RDFS的擴展——OWL
上面我們提到剂陡,RDFS本質(zhì)上是RDF詞匯的一個擴展。后來人們發(fā)現(xiàn)RDFS的表達(dá)能力還是相當(dāng)有限狐胎,因此提出了OWL鹏倘。我們也可以把OWL當(dāng)做是RDFS的一個擴展,其添加了額外的預(yù)定義詞匯顽爹。
OWL纤泵,即“Web Ontology Language”,語義網(wǎng)技術(shù)棧的核心之一镜粤。OWL有兩個主要的功能:
提供快速捏题、靈活的數(shù)據(jù)建模能力。
高效的自動推理肉渴。
我們先談如何利用OWL進(jìn)行數(shù)據(jù)建模公荧。用OWL對羅納爾多知識圖進(jìn)行語義層的描述:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
### 這里我們用詞匯owl:Class定義了“人”和“地點”這兩個類。
:Person rdf:type owl:Class.
:Place rdf:type owl:Class.
### owl區(qū)分?jǐn)?shù)據(jù)屬性和對象屬性(對象屬性表示實體和實體之間的關(guān)系)同规。詞匯owl:DatatypeProperty定義了數(shù)據(jù)屬性循狰,owl:ObjectProperty定義了對象屬性。
:chineseName rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:career rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:fullName rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:birthDate rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:date .
:height rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:int .
:weight rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:int .
:nationality rdf:type owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:hasBirthPlace rdf:type owl:ObjectProperty;
rdfs:domain :Person;
rdfs:range :Place .
:address rdf:type owl:DatatypeProperty;
rdfs:domain :Place;
rdfs:range xsd:string .
:coordinate rdf:type owl:DatatypeProperty;
rdfs:domain :Place;
rdfs:range xsd:string .
schema層的描述語言換為OWL后券勺,層次圖表示為:
數(shù)據(jù)屬性用青色表示绪钥,對象屬性由藍(lán)色表示。
羅納爾多這個例子不能展現(xiàn)OWL豐富的表達(dá)能力关炼,我們這里簡單介紹一下常用的詞匯:
描述屬性特征的詞匯
owl:TransitiveProperty. 表示該屬性具有傳遞性質(zhì)程腹。例如,我們定義“位于”是具有傳遞性的屬性儒拂,若A位于B寸潦,B位于C,那么A肯定位于C社痛。
owl:SymmetricProperty. 表示該屬性具有對稱性见转。例如,我們定義“認(rèn)識”是具有對稱性的屬性蒜哀,若A認(rèn)識B斩箫,那么B肯定認(rèn)識A。
owl:FunctionalProperty. 表示該屬性取值的唯一性凡怎。 例如校焦,我們定義“母親”是具有唯一性的屬性,若A的母親是B统倒,在其他地方我們得知A的母親是C寨典,那么B和C指的是同一個人。
owl:inverseOf. 定義某個屬性的相反關(guān)系房匆。例如耸成,定義“父母”的相反關(guān)系是“子女”报亩,若A是B的父母,那么B肯定是A的子女井氢。
本體映射詞匯(Ontology Mapping)
owl:equivalentClass. 表示某個類和另一個類是相同的弦追。
owl:equivalentProperty. 表示某個屬性和另一個屬性是相同的。
owl:sameAs. 表示兩個實體是同一個實體花竞。
本體映射主要用在融合多個獨立的Ontology(Schema)劲件。舉個例子,張三自己構(gòu)建了一個本體結(jié)構(gòu)约急,其中定義了Person這樣一個類來表示人零远;李四則在自己構(gòu)建的本體中定義Human這個類來表示人。當(dāng)我們?nèi)诤线@兩個本體的時候厌蔽,就可以用到OWL的本體映射詞匯牵辣。回想我們在第二篇文章中提到的Linked Open Data奴饮,如果沒有OWL纬向,我們將無法融合這些知識圖譜。
http://www.zhangsan.com/ontology/Person rdf:type owl:Class .
http://www.lisi.com/ontology/Human rdf:type owl:Class .
http://www.zhangsan.com/ontology/Person owl:equivalentClass http://www.lisi.com/ontology/Human .
更多的OWL詞匯和特性請參考W3C官網(wǎng)文檔戴卜。
接下來我們談一下OWL在推理方面的能力逾条。知識圖譜的推理主要分為兩類:基于本體的推理和基于規(guī)則的推理。
我們這里談的是基于本體的推理叉瘩。讀者應(yīng)該發(fā)現(xiàn)膳帕,上面所介紹的屬性特征詞匯其實就創(chuàng)造了對RDF數(shù)據(jù)進(jìn)行推理的前提。此時薇缅,我們加入支持OWL推理的推理機(reasoner),就能夠執(zhí)行基于本體的推理了攒磨。RDFS同樣支持推理泳桦,由于缺乏豐富的表達(dá)能力,推理能力也不強娩缰。舉個例子灸撰,我們用RDFS定義人和動物兩個類,另外拼坎,定義人是動物的一個子類浮毯。此時推理機能夠推斷出一個實體若是人,那么它也是動物泰鸡。OWL當(dāng)然支持這種基本的推理债蓝,除此之外,憑借其強大的表達(dá)能力盛龄,我們能進(jìn)行更有實際意義的推理饰迹。想象一個場景芳誓,我們有一個龐大數(shù)據(jù)庫存儲人物的親屬關(guān)系。里面很多關(guān)系都是單向的啊鸭,比如锹淌,其只保存了A的父親(母親)是B,但B的子女字段里面沒有A赠制,如下表赂摆。
如果在只有單個關(guān)系,數(shù)據(jù)量不多的情況下钟些,我們尚能人工的去補全這種關(guān)系烟号。如果在關(guān)系種類上百,人物上億的情況下厘唾,我們?nèi)绾翁幚砣旆慨?dāng)進(jìn)行關(guān)系修改,添加抚垃,刪除等操作的時候喷楣,該怎么處理?這種場景想想就會讓人崩潰鹤树。如果我們用inversOf來表示hasParent和hasChild互為逆關(guān)系铣焊,上面的數(shù)據(jù)可以表示為:
綠色的關(guān)系表示是我們RDF數(shù)據(jù)中真實存在的,紅色的關(guān)系是推理得到的罕伯。通過這個例子曲伊,相信讀者應(yīng)該初步了解了OWL的推理功能和能力。
目前追他,OWL的最新版本是OWL 2坟募,在兼容OWL的基礎(chǔ)上添加了新的功能,有興趣的讀者可以查閱W3C文檔邑狸。另外懈糯,OWL 2包含了三個標(biāo)準(zhǔn),或者三種配置(Profile)单雾,它們是OWL 2完整標(biāo)準(zhǔn)(OWL 2/Full)的一個子集赚哗。讀者目前不用考慮它們之間的差別,只有當(dāng)我們要用到OWL自動推理功能的時候才需要考慮到底使用哪一種配置硅堆。且在大多數(shù)情況下屿储,我們需要知道哪種配置才是最合適的。下面簡單說說它們使用的場景:
OWL 2/EL 使用場景:本體結(jié)構(gòu)中有大量相互鏈接的類和屬性渐逃,設(shè)計者想用自動推理機得到里面復(fù)雜的關(guān)系够掠。
OWL 2/QL 使用場景:有大量的實例數(shù)據(jù)。OWL 2 QL本體可以被改寫為SQL查詢朴乖,適用于使用OBDA(ontology based data access)的方式來訪問關(guān)系數(shù)據(jù)庫祖屏。也就是說我們不用顯式地把關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)為RDF助赞,而是通過映射的方式,將數(shù)據(jù)庫轉(zhuǎn)為虛擬RDF圖進(jìn)行訪問袁勺。
OWL 2/RL 使用場景:需要結(jié)合基于規(guī)則的推理引擎(rule-based reasoning engine)的場合雹食。
正文之后
OK~ 重出江湖了~ 明兒個就是我第一次正式的組會報告了。期丰。緊張勝過其他群叶。。钝荡。街立。ppt改了又改。埠通。赎离。希望快點變油