語義網絡與知識圖譜入門(一)
RDF/XML
本體:一種形式化的對於共享概念體系明確而又詳細的說明。就是指一種抽象的模型,可以用來描述對象類型、屬性以及關系類型所構成的世界。
RDF/XML主要講的就是如何用XML的方式來表示RDF的圖。

橢圓表示節點,矩形表示文本,弧表示謂語。
節點描述
<rdf:Description rdf:about="A"></rdf:Description>
一個節點本身需要被rdf:Description來定義,通過rdf:about來說明資源uri。
前面rdf是空間名字,固有空間默認為rdf空間。
屬性描述
如何描述A的屬性d的值為D呢?
屬性描述
<rdf:Description rdf:about="A">
<d>D</d>
</rdf:Description>
簡寫
<rdf:Description rdf:about="A" d="D"></rdf:Description>
路徑描述
如何描述A到B的路徑呢?
可以通過定義rdf:nodeId的方式指定唯一的nodeId,也可以通過rdf:parseType為Resouce來指定空節點。
屬性描述,注意這里的B也是個節點,所以也需要Description
<rdf:Description rdf:about="A">
<a rdf:nodeId="abc"></a>
</rdf:Description>
<rdf:Description rdf:nodeId="abc">
<b>
<rdf:Description rdf:about="B" ></rdf:Description>
</b>
</rdf:Description>
不單獨寫空節點,即用resource
<rdf:Description rdf:about="A">
<a rdf:parseType="Resource">
<b>
<rdf:Description rdf:about="B" ></rdf:Description>
</b>
</a>
</rdf:Description>
文本表示
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="http://example.com">
<ex:prop rdf:parseType="Literal" xmlns:a="http://example.org/a#">
123
</ex:prop>
</rdf:Description>
</rdf:RDF>
xmlns即xml namespace,定義一個命令空間。
使用語法: xmlns:namespace-prefix="namespaceURI"。
這里定義一個名字為a的命令空間
可以看到解析后的結果為:
| Number | Subject | Predicate | Object |
|---|---|---|---|
| 1 | http://example.com](http://example.com/) | http://purl.org/dc/elements/1.1/prop) | "123"^^http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral |
解析網址:https://www.w3.org/RDF/Validator/rdfval
通過解析可以看出來將prop指向的內容解析成了文本類型,即通過指定rdf:parseType="Literal"來實現。謂詞rdf:parseType="Literal",指明節點的內容是普通文本,解釋器不需要對其進行解釋。
數據類型
可以使用rdf:datatype指定文本的數據類型
<rdf:RDF>
<rdf:Description rdf:about="http://example.com">
<a rdf:datatype="http://www.w3.org/2001/XMLSchema#int">
123
</a>
</rdf:Description>
</rdf:RDF>
同樣的,也有string,date,decimal等數據類型可以在上面的datatype中指定。
RDF Schema (RDFS)
RDFS的全稱為RDF Schema,RDF Schema 中的類與面向對象編程語言中的類非常相似。這就使得資源能夠作為類的實例和類的子類來被定義。
<rdf:RDF
xmlns:rdf= "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base= "http://www.animals.fake/animals#">
<rdf:Description rdf:ID="animal">
<rdf:type
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
</rdf:Description>
<rdf:Description rdf:ID="horse">
<rdf:type
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#animal"/>
</rdf:Description>
</rdf:RDF>
rdf:type
用來表示主語是謂語的一個實例,主語是一個資源,謂語是一個類 ,上面例子中說明animal是class的實例,horse也是class的實例。
rdfs:subClassOf
用來表示主語是謂語的子類,主語和謂語都是一個類 。上面例子中表明horse是animal的子類。
rdfs:subPropertyOf
用來表示主語是謂語的子屬性,主語和謂語都是屬性
rdfs:domain
用來表示屬性的定義域
rdfs:range
用來表示值域
另外,一切所有皆資源(resource):所有類(class)都是資源,所有屬性(property)都是資源,所有literal都是資源。
容器
Open Lists
open lists為課題添加新元素的容器。
rdf:Seq表示一個規定為有序的值的列表(比如一個字母順序的排序),可以包含重復值。
rdf:Bag表示一個規定為無序的值的列表,可以包含重復值。
rdf:Alt表示一個可替換的值的列表(用戶僅可選擇這些值的其中之一)。
<rdf:RDF>
<rdf:Description rdf:about="http://a.com">
<a>
<rdf:Alt>
<rdf:li>CD</rdf:li>
<rdf:li>Record</rdf:li>
<rdf:li>Tape</rdf:li>
</rdf:Alt>
</a>
</rdf:Description>
</rdf:RDF>
rdf:li,解釋器在解釋時,將自動生成編號。
Closed Lists
closed lists為不可以添加元素的容器,其成為collections。通過rdf:parseType="collections"可以將賓語視為closed lists。
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://recshop.fake/cd#">
<rdf:Description
rdf:about="http://recshop.fake/cd/Beatles">
<cd:artist rdf:parseType="Collection">
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/George"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/John"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/Paul"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/Ringo"/>
</cd:artist>
</rdf:Description>
</rdf:RDF>
Turtle語法
turtle用三元組表示,每個句子后面一個.表示句子結束。
前綴
@prefix book: <http://aa.com> .
@prefix ex: <http://axx.com> .
通過@prefix來指定前綴,這樣就可以在后面用這個前綴了。
book:uri ex:a "aaa".
