目錄
主要總結知識專欄知識圖譜的理論部分
A knowledge graph consists of a set of interconnected typed entities and their attributes.
用更正式的說法,知識圖譜是由本體(Ontology)作爲Schema層,和RDF數據模型兼容的結構化數據集。
語義網絡的缺點:
-
節點和邊的值沒有標準,完全是由用戶自己定義。
-
多源數據融合比較困難,因爲沒有標準。
-
無法區分概念節點和對象節點。
-
無法對節點和邊的標籤(label,我理解是schema層,後面會介紹)進行定義。
RDF的提出解決了語義網絡的缺點1和缺點2,在節點和邊的取值上做了約束,制定了統一標準,爲多源數據的融合提供了便利。另外,RDF對is-a關係進行了定義,即,rdf:type(是rdf標準中的一個詞彙,之後的文章會介紹)。因此,不管在哪個語義網絡中,表達is-a關係,我們都用rdf:type,在語法上形成了統一。
舉個例子,假如我們有兩個語義網絡A和B。在A中,熊是哺乳動物的一個實例。在B中,熊是哺乳動物的一個子類。前者是is-a關係,後者是subClassOf關係。這種情況常有發生,我們建模的角度不同,那麼同一個事物的表示也可能不同。如果我們不能用一種方法來區別兩者,不僅會給我們帶來理解上的困難,在進行融合的時候也會造成數據衝突。我們不能說A既是B的一個實例,又是B的一個子類。W3C制定的另外兩個標準RDFS/OWL解決了這個問題,如下圖。
在語義網技術棧中,RDFS和OWL是RDF更上一層的技術,主要是爲了解決語義網絡的缺點3和缺點4,其提供了schema層的描述。
Tom Gruber把本體定義爲“概念和關係的形式化描述”,分別指實體的類層次和關係層次。
關係我們也稱爲屬性(Property),根據是實體和實體之間的關係還是實體和數據值之間的關係分爲對象屬性(Object Property)和數據屬性(Data Property)。在圖中,羅納爾多和里約熱內盧的關係(本例中是對象屬性)與羅納爾多和全名的關係(本例中是數據屬性)用RDF就可以表示爲:
- www.kg.com/person/1 kg:hasBirthPlace www.kg.com/place/10086
- www.kg.com/person/1 kg:fullName “Ronaldo Luís Nazário de Lima”^^xsd:string
RDF的表達能力有限,無法區分類和對象,也無法定義和描述類的關係/屬性。
RDFS/OWL本質上是一些預定義詞彙(vocabulary)構成的集合,用於對RDF進行類似的類定義及其屬性的定義。
我們這裏只介紹RDFS幾個比較重要,常用的詞彙:
-
rdfs:Class. 用於定義類。
-
rdfs:domain. 用於表示該屬性屬於哪個類別。
-
rdfs:range. 用於描述該屬性的取值類型。
-
rdfs:subClassOf. 用於描述該類的父類。比如,我們可以定義一個運動員類,聲明該類是人的子類。
-
rdfs:subProperty. 用於描述該屬性的父屬性。比如,我們可以定義一個名稱屬性,聲明中文名稱和全名是名稱的子類。
我們也可以把OWL當做是RDFS的一個擴展,其添加了額外的預定義詞彙。
owl區分數據屬性和對象屬性(對象屬性表示實體和實體之間的關係)。詞彙owl:DatatypeProperty定義了數據屬性,owl:ObjectProperty定義了對象屬性。
描述屬性特徵的詞彙
-
owl:TransitiveProperty. 表示該屬性具有傳遞性質。例如,我們定義“位於”是具有傳遞性的屬性,若A位於B,B位於C,那麼A肯定位於C。
-
owl:SymmetricProperty. 表示該屬性具有對稱性。例如,我們定義“認識”是具有對稱性的屬性,若A認識B,那麼B肯定認識A。
-
owl:FunctionalProperty. 表示該屬性取值的唯一性。 例如,我們定義“母親”是具有唯一性的屬性,若A的母親是B,在其他地方我們得知A的母親是C,那麼B和C指的是同一個人。
-
owl:inverseOf. 定義某個屬性的相反關係。例如,定義“父母”的相反關係是“子女”,若A是B的父母,那麼B肯定是A的子女。
本體映射詞彙(Ontology Mapping)
-
owl:equivalentClass. 表示某個類和另一個類是相同的。
-
owl:equivalentProperty. 表示某個屬性和另一個屬性是相同的。
-
owl:sameAs. 表示兩個實體是同一個實體。
本體映射主要用在融合多個獨立的Ontology(Schema)。回想我們在第二篇文章中提到的Linked Open Data,如果沒有OWL,我們將無法融合這些知識圖譜。
知識圖譜的推理主要分爲兩類:基於本體的推理和基於規則的推理。我們這裏談的是基於本體的推理。想象一個場景,我們有一個龐大數據庫存儲人物的親屬關係。裏面很多關係都是單向的,比如,其只保存了A的父親(母親)是B,但B的子女字段裏面沒有A,如下表。
如果我們用inversOf來表示hasParent和hasChild互爲逆關係,就可以做這個推理。
OWL 2包含了三個標準,或者三種配置(Profile),它們是OWL 2完整標準(OWL 2/Full)的一個子集。讀者目前不用考慮它們之間的差別,只有當我們要用到OWL自動推理功能的時候才需要考慮到底使用哪一種配置。且在大多數情況下,我們需要知道哪種配置纔是最合適的。下面簡單說說它們使用的場景:
-
OWL 2/EL 使用場景:本體結構中有大量相互鏈接的類和屬性,設計者想用自動推理機得到裏面複雜的關係。
-
OWL 2/QL 使用場景:有大量的實例數據。OWL 2 QL本體可以被改寫爲SQL查詢,適用於使用OBDA(ontology based data access)的方式來訪問關係數據庫。也就是說我們不用顯式地把關係數據庫中的數據轉爲RDF,而是通過映射的方式,將數據庫轉爲虛擬RDF圖進行訪問。
-
OWL 2/RL 使用場景:需要結合基於規則的推理引擎(rule-based reasoning engine)的場合。
SPARQL即SPARQL Protocol and RDF Query Language的遞歸縮寫,專門用於訪問和操作RDF數據,是語義網的核心技術之一。
從SPARQL的全稱我們可以知道,其由兩個部分組成:協議和查詢語言。
-
查詢語言很好理解,就像SQL用於查詢關係數據庫中的數據,XQuery用於查詢XML數據,SPARQL用於查詢RDF數據。
-
協議是指我們可以通過HTTP協議在客戶端和SPARQL服務器(SPARQL endpoint)之間傳輸查詢和結果,這也是和其他查詢語言最大的區別。