RDF 通識說明

RDF 定義

  • R 代表 Resource,即資源,任何可以被唯一標(biāo)識的對象,都可以稱為資源。例如,網(wǎng)頁、地點(diǎn)、人、事件、餐館等;
  • D 代表 Description,也就是說對資源的描述,包括資源屬性的描述和資源間關(guān)系的描述;
  • F 則是指 Framework,即 RDF 為資源描述提供了描述的語言和模型。

RDF 知識庫

RDF 字典(Schema)定義數(shù)據(jù)建模的元數(shù)據(jù)項(xiàng),包含 classproperty 兩種類型。

class 表示對象實(shí)例,類似面向?qū)ο缶幊讨械?classproperty 分為 屬性(attribute) 和 關(guān)系(relationship) 兩類。

RDF 字典的定義自身也是一個 RDF graph, 即 RDF 是自描述的數(shù)據(jù)模型,是一種 schema-free 的數(shù)據(jù)模型。

sparql 查詢語句類型

下面查詢命令使用 d2r-server 啟動之后,以某個表結(jié)構(gòu)即可進(jìn)行測試

語句類型 描述
SELECT 從 RDF 中選擇出滿足條件的資源或者屬性;
CONSTRUCT 根據(jù)條件獲取滿足條件的 Triple 并以此生成一個新的 RDF 數(shù)據(jù)集;
DESCRIBE 獲取用戶輸入的資源的所有屬性描述;
ASK SELECT 的優(yōu)化版本,它只檢查是否存在滿足條件的資源或者屬性,但不需要全部找出。

SELECT 查詢語句

如下以電影庫為例進(jìn)行舉例說明

1. 基礎(chǔ)語法

# 基礎(chǔ)查詢語句格式如下所示:
#
# PREFIX  <前綴定義>
# SELECT  [結(jié)果字段, ....]
# WHERE   { 條件語句 }  
# ORDER BY [排序字段] DESC/ASC 
# LIMIT 數(shù)量
#
SELECT * 
# 填充查詢條件
WHERE {    
      ?s ?p ?o
}
# 輸出前十條記錄
LIMIT 10

2. 多條件查詢

# 定義前綴
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

# 輸出 ?n 屬性值
SELECT ?n 
# 填充查詢條件
WHERE {    
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s :hasActedIn ?o.
      ?o :movieTitle ?n.
      ?o :movieRating ?r.
}
# 輸出前十條記錄
LIMIT 10

3. 字段過濾

# 定義前綴
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

# 輸出 ?n 屬性值
SELECT ?n 
# 填充查詢條件
WHERE {    
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s :hasActedIn ?o.
      ?o :movieTitle ?n.
      ?o :movieRating ?r.
      # 過濾出評級大于等于 7 的電影
      FILTER (?r >= 7)
}
# 輸出前十條記錄
LIMIT 10

WHERE 語句中僅 FILTER 后面語句中能使用函數(shù), 常見函數(shù)列表查看下面參考鏈接內(nèi)容

4. 聚合

# 定義前綴
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

# 輸出 ?n 并重命名為 ?NAME, 聚合函數(shù)為 count 并重命名為 ?NELEMENTS 屬性值
SELECT (?n AS ?NAME) (COUNT(?o) as ?NELEMENTS) 
# 填充查詢條件
WHERE {    
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s :hasActedIn ?o.
      ?o :movieTitle ?n.
      ?o :movieRating ?r.
      # 過濾出評級大于等于 7 的電影
      FILTER (?r >= 7)
}
GROUP BY ?n
# 輸出前十條記錄
LIMIT 10

5. 排序

sparql 語句中的正/倒序與 sql 中的是有區(qū)別的,如下所示:

# 定義前綴
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

# 輸出 ?n 并重命名為 ?NAME, 聚合函數(shù)為 count 并重命名為 ?NELEMENTS 屬性值
SELECT (?n AS ?NAME) (COUNT(?o) as ?NELEMENTS) 
# 填充查詢條件
WHERE {    
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s :hasActedIn ?o.
      ?o :movieTitle ?n.
      ?o :movieRating ?r.
      # 過濾出評級大于等于 7 的電影
      FILTER (?r >= 7)
}
GROUP BY ?n
# 按評級進(jìn)行倒序排序,排序方式以函數(shù)的方式存在
ORDER BY DESC(count(distinct ?r)) ASC(?n)
# 上句  order by 語句也可以寫成  ORDER BY DESC(?NELEMENTS) ASC(?n)
# 輸出前十條記錄
LIMIT 10

參考

ASK 語句

詢問是否真實(shí)的語句,存在即返回為 true

# 語句中直接輸入 WHERE 條件語句即可
ASK {
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s :hasActedIn ?o.
      ?o :movieTitle ?n.
      ?o :movieRating ?r.
}

CONSTRUCT 查詢語句

按條件查詢并輸出查詢結(jié)果的所有結(jié)構(gòu)

# 注意這里需要使用 {} 來括起來哦
CONSTRUCT { ?s ?p ?o }
WHERE {
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s ?p ?o
}

參考

DESCRIBE 查詢語句

按條件查詢并輸出查詢結(jié)果并輸出其相應(yīng)的所有屬性描述

DESCRIBE ?s 
WHERE {
      # 查詢條件,以 `.` 來表示單個查詢條件,單subject 多個條件時可以用 `;` 進(jìn)行鏈接
      # 如下表示查詢 rdf:type = :Person and :personName = '鞏俐' 的人
      ?s rdf:type :Person ; :personName '鞏俐'.
      # 再將人與電影進(jìn)行關(guān)聯(lián),獲取到電影名稱和電影的評級
      ?s ?p ?o
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容