# Lua 模版快速取用 Wikidata
COSCUP 2020
簡報網址: https://bit.ly/33hK0So
[[User:Plantoid]]
簡報授權方式: [姓名標示\-相同方式分享 3\.0 台灣](https://creativecommons.org/licenses/by-sa/3.0/tw/)
---
## Lua 模版快速取用 Wikidata

簡報網址: https://bit.ly/33hK0So
---
## 大綱
* 取用 Wikidata 資料最佳實踐
* 為什麼重複使用 Wikidata 資料
* Wikidata 資料使用範例
* 使用 MediaWiki Lua 模組
* MediaWiki Module
* Wikidata 詞彙
* Module:Wikibase
* Module:Wd
* Server 環境設置
* 結論
---
## 取用 Wikidata 資料最佳實踐
採用 CC0 授權 (公眾領域貢獻宣告):免費、不需註明出處

介紹: [「公眾領域貢獻宣告」(CC0) \| 台灣創用CC計畫](http://creativecommons.tw/cc0)
---

---
* 雖然 CC0 沒有強制要註明出處,但是 Wikidata 會感謝你標示「Powered by Wikidata」或加上 Wikidata logo
* 提供網址讓使用者可以反應資料問題、或回饋意見給 Wikidata 編輯者社群
---
## 為什麼重複使用 Wikidata 資料
* 將事實資料集中,避免重工
* 對照不同來源的資料,減少語言隔閡
* 整合不同來源的資料
* 集中資料,方便更多人發現與修改錯誤
---
## Wikidata 資料使用範例
* 維基百科的資訊框 (infobox) 模版
* 地圖或圖表
* 維護主題清單 e.g. [Birthday today](https://en.wikipedia.org/wiki/Wikipedia:Database_reports/Birthday_today)
* 視覺化 e.g. [The Apollo missions](http://histropedia.com/timeline/7c00jg84kn/Apollo-missions) timeline
---
### 範例:維基百科的資訊框 (infobox) 模版

---
### 範例:維基百科的內容使用 Wikidata 資料
臺灣 - 維基百科,自由的百科全書 https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3
```
在此頁面使用的維基數據實體
臺灣:網站連結、一些陳述、標題、其它(陳述)
```
---
### 範例:使用地理圖表

---
* Geography of Taiwan - Wikipedia https://en.wikipedia.org/wiki/Geography_of_Taiwan
* geography of Taiwan - Wikidata https://www.wikidata.org/wiki/Q22528
* OSM關係識別碼 (OpenStreetMap relation ID) - Wikidata https://www.wikidata.org/wiki/Property:P402
* 關聯:臺灣 (7219605) | OpenStreetMap https://www.openstreetmap.org/relation/7219605
---
### 範例:跨站連結
以[臺灣](https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3)條目為例,在側邊工具提供「維基數據項目」(Wikidata item) 連結 https://www.wikidata.org/wiki/Special:EntityPage/Q22528

---
## 使用 MediaWiki Lua 模組
「簡潔、輕量、可延伸的手稿語言。」

---
### MediaWiki Wikidata Module 使用統計
| Module | 英文維基 | 中文維基 |
| ------------------- | --------:| --------:|
| [Module:EditAtWikidata](https://en.wikipedia.org/wiki/Module:EditAtWikidata) | 👑 1,350,072 | 121,221 |
| [Module:Wd](https://en.wikipedia.org/wiki/Module:Wd) | **1,147,925**| 116,783 |
| [Module:WikidataIB](https://en.wikipedia.org/wiki/Module:WikidataIB) | 1,010,985| 128,779 |
| [Module:Wikibase](https://en.wikipedia.org/wiki/Module:Wikibase) | 4| 👑 **838,742**|
| [Module:Wikidata](https://en.wikipedia.org/wiki/Module:Wikidata) *棄用* | 135,976| 91,747 |
統計來源:[Jarry1250's Wikimedia Laboratory \- Template transclusion count](https://templatecount.toolforge.org/index.php?lang=en&namespace=828#bottom)
---
### MediaWiki Module 用法
* (已安裝 Extension:Scribunto)
* 建立 Module:Module_name 的頁面
* 建立 XX 的頁面,輸入以下語法,呼叫 Module:Module_name
```
{{#invoke: Module_name | function_name
| arg1 | arg2 | arg3 ... }}
```
---
### Wikidata 詞彙

source: [維基資料:詞彙表 \- Wikidata](https://www.wikidata.org/wiki/Wikidata:Glossary/zh-hant)
---
### Module:Wikibase 用法: id
Wikidata 項目識別符 (item identifier)
```
{{#invoke: Wikibase | id }}
```
範例
* [臺灣 \- 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3) 顯示 [臺灣 \- Wikidata](https://www.wikidata.org/wiki/Q22502) 項目識別符:`Q22502`
* 若無則顯示:無項目
---
### Module:Wikibase 用法: label
Wikidata 項目標籤
```
{{#invoke: Wikibase | label }}
```
範例
* [Lee Teng\-hui \- Wikipedia](https://en.wikipedia.org/wiki/Lee_Teng-hui) 顯示 [李登輝 \- Wikidata](https://www.wikidata.org/wiki/Q6538737) 英文語系 `label` 欄位值: `Lee Teng-hui`
* [李登輝 \- 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E6%9D%8E%E7%99%BB%E8%BC%9D) 顯示 [李登輝 \- Wikidata](https://www.wikidata.org/wiki/Q6538737) 中文語系 `label` 欄位值: `李登輝`
---
```
{{#invoke: Wikibase | label | entity id (Q# or P#) }}
```
範例
* `{{#invoke: Wikibase | label | Q6538737}}` 顯示 [李登輝 \- Wikidata](https://www.wikidata.org/wiki/Q6538737) (Q6538737) 中文語系 `label` 欄位值: `李登輝` (註:會受到使用者「中文變體」設定影響)
* `{{#invoke: Wikibase | label | P27}}` 則顯示 Wikidata `P27` 欄位名稱:`國籍`
---
### Module:Wikibase 用法: description
Wikidata 項目描述
```
{{#invoke: Wikibase | description }}
```
範例
* [中華民國 \- 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B) 顯示 [中華民國 \- Wikidata](https://www.wikidata.org/wiki/Q865) 中文語系 `description` 欄位值:`東亞的民主共和國`
* [Lee Teng\-hui \- Wikipedia](https://en.wikipedia.org/wiki/Lee_Teng-hui) 顯示 [李登輝 \- Wikidata](https://www.wikidata.org/wiki/Q6538737) 英文語系 `description` 欄位值:`former President of Republic of China`
---
```
{{#invoke: Wikibase | description | entity id (Q# or P#) }}
```
範例
* `{{#invoke: Wikibase | description | Q22502}}` 顯示 [臺灣 \- Wikidata](https://www.wikidata.org/wiki/Q22502) (Q22502) 中文語系 `description` 欄位值:`西太平洋/東亞島嶼`
* `{{#invoke: Wikibase | description | P27}}` 顯示 Wikidata `P27` 欄位描述:`主項人物持有公民權的所屬國家`
---
### Module:Wikibase 用法: wdurl
Wikidata 條目網址 (英文維基可用、~~中文維基~~尚未支援)
```
{{#invoke: Wikibase | wdurl }}
{{#invoke: Wikibase | wdurl | entity id (Q# or P#) }}
```
範例
* [Geography of Taiwan \- Wikipedia](https://en.wikipedia.org/wiki/Geography_of_Taiwan) 輸入 `{{#invoke: Wikibase | wdurl }}` 顯示 https://www.wikidata.org/wiki/Special:EntityPage/Q22528 即 [台灣地理 \- Wikidata](https://www.wikidata.org/wiki/Q22528) 條目網址
---
### Module:Wikibase 用法: datatype
Wikidata 條目屬性資料型態
```
{{#invoke: Wikibase | datatype | property id (P#) }}
```
範例
* 輸入 `{{#invoke: Wikibase | datatype | P27}}` ([國籍 \- Wikidata](https://www.wikidata.org/wiki/Property:P27)) 顯示 `wikibase-item` (項目)
---
| 資料型態 | 資料範例 |
| -------- | -------- |
| commonsMedia (共享資源媒體檔案) | [圖片 \- Wikidata](https://www.wikidata.org/wiki/Property:P18) (P18) |
| globe-coordinate (地理座標) | [地理座標 \- Wikidata](https://www.wikidata.org/wiki/Property:P625) (P625) |
| wikibase-item (項目) | [政府首長 \- Wikidata](https://www.wikidata.org/wiki/Property:P6) (P6) |
| wikibase-property (屬性) | [父屬性 \- Wikidata](https://www.wikidata.org/wiki/Property:P1647) (P1647) |
| string (字串) | [學名 \- Wikidata](https://www.wikidata.org/wiki/Property:P225) (P225) |
詳細資料型態清單請見:[Help:Data type \- Wikidata](https://www.wikidata.org/wiki/Help:Data_type)
---
### Module:Wd 用法
```
{{#invoke:wd | property | entity id (Q#)| property id (P#)}}
{{#invoke:wd | properties | entity id (Q#)| property id (P#)}}
```
範例:
* 台灣人口多少 `{{#invoke:wd|property|Q22502|P1082}}` 顯示 `23,500,000` --> 對應到 [臺灣 \- Wikidata](https://www.wikidata.org/wiki/Q22502) (Q22502) 的人口屬性 [人口 \- Wikidata](https://www.wikidata.org/wiki/Property:P1082) (P1082)
* 台灣記載於 `{{#invoke:wd|properties|Q22502|P1343}}` 顯示 `亚美尼亚苏维埃百科全书、布羅克豪斯-艾佛隆百科詞典`
---
範例:台北一筆人口數值
輸入`{{#invoke:wd|property|normal+|Q1867|P1082}}`
說明
* Q1867 [臺北市 \- Wikidata](https://www.wikidata.org/wiki/Q1867)
* P1082 [人口 \- Wikidata](https://www.wikidata.org/wiki/Property:P1082)
顯示 `2,684,567`
---
範例:台北多筆人口數值
輸入
`{{#invoke:wd|properties|normal+|Q1867|P1082}}`
說明
* `property` 改成 `properties`
顯示為 `2,684,567、2,704,810、2,647,076、2,645,881 ...`
---
範例:台北多筆人口數值 加上調查日期
輸入
`{{#invoke:wd|properties|qualifier|normal+|Q1867|P1082|P585}}`
說明
* 加上 `qualifier` (限定詞/限定符)
* P585 [日期 \- Wikidata](https://www.wikidata.org/wiki/Property:P585)
顯示為 `2,684,567 (2013年11月)、2,704,810 (2015)、2,647,076 (2001年1月)`
---
範例:台北多筆人口數值 加上調查日期、資料來源
輸入
`{{#invoke:wd|properties|qualifier|references|normal+|Q1867|P1082|P585}}`
說明
* 加上 `references`
顯示為
```
2,684,567 (2013年11月)[1]、2,704,810 (2015)[2]、...
1. http://ca.gov.taipei/public/Attachment/621617235718.ods%E3%80%82
2. http://sowf.moi.gov.tw/stat/month/m1-07.xls%E3%80%82
```
---
## Server 環境設置
---
### MediaWiki
<div style="display: block; margin-left: auto;
margin-right: auto; width: 100%;">

</div>
* Wiki 軟體
* 伺服器軟體
* 支援維機媒體基金會專案
* 自由軟體:GNU 通用公共授權條款 (GNU General Public License)
https://www.mediawiki.org/wiki/MediaWiki
---
### 擴充套件設置
```
Extension:Scribunto
* Extension:WikiEditor 編輯器
* Extension:SyntaxHighlight 美化程式碼
* Extension:CodeEditor 編輯器
* LuaSandbox 如果想要用額外的 Lua
Extension:Wikibase Client
```
授權: GPL v 2.0+
(* 代表選擇性安裝)
---
### 環境設置
* Extension:Scribunto 內建 Lua 支援的作業系統: Linux (x86 and x86-64), Mac OS X Lion, and Windows (32- and 64-bit)
* 啟用 PHP `proc_open` 函數: `Execute a command and open file pointers for input/output` ([PHP網站](https://www.php.net/manual/en/function.proc-open.php))
* 設定 `Lua` 執行權限
```bash
chmod 755 /path/to/mediawiki/extensions/Scribunto/
includes/engines/LuaStandalone/binaries/
lua5_1_5_作業系統類型/lua
```
---
## 結論
* 將資料集中,避免重工、方便發現與修改錯誤、增加資料品質
* 對照不同來源的資料,減少語言隔閡
* 複雜查詢可以使用 Lua 模組 Module:Wd 或 Module:WikidataIB
* 簡單查詢可用 Module:Wikibase
---
## The End
簡報網址: https://bit.ly/33hK0So
[[User:Plantoid]]
planetoid@gmail.com
---
## 參考資料
* Wikidata:Data access 3 Best practices to follow https://www.wikidata.org/wiki/Wikidata:Data_access#Best_practices_to_follow
* Wikidata:Wikidata in Wikimedia projects - Wikidata https://www.wikidata.org/wiki/Wikidata:Wikidata_in_Wikimedia_projects
* Wikipedia:Wikidata - Wikipedia https://en.wikipedia.org/wiki/Wikipedia:Wikidata
---
* Lua - 維基百科,自由的百科全書 https://zh.wikipedia.org/zh-tw/Lua
* Lua/Tutorial - MediaWiki https://www.mediawiki.org/wiki/Lua/Tutorial
* Extension:Scribunto - MediaWiki https://www.mediawiki.org/wiki/Extension:Scribunto
* Module:Wikibase - Wikipedia https://en.wikipedia.org/wiki/Module:Wikibase
* 模組:Wikibase - 維基百科,自由的百科全書 https://zh.wikipedia.org/wiki/Module:Wikibase
* Module:Wd - Wikipedia https://en.wikipedia.org/wiki/Module:Wd
---
## 技術問題排除
---
### Lua 錯誤:內部錯誤:直譯器因收到信號 "9" 已中止
解法:macOS 的安全設置
1. 執行 `Lua` ,跳出「安全性與隱私權」警告 --> 允許 `Lua` 執行
2. 再執行一次 `Lua`
3. 無法驗證「`Lua`」的開發者,確定要打開它嗎 --> 確定
4. 再執行一次 `Lua` ,直到出現版本資訊
---
```bash
## 輸入
% /path/to/mediawiki/extensions/Scribunto/
includes/engines/LuaStandalone/binaries/
lua5_1_5_mac_lion_fat_generic/lua
## 預期結果
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
```
```bash
## 離開 Lua console
% os.exit()
```
---
### attempt to index field 'wikibase' (a nil value)
錯誤:`Lua 錯誤 於 模組:XXX 中的第 XX 行:attempt to index field 'wikibase' (a nil value)。`
解法:檢查安裝 [Extension:Wikibase Client](https://www.mediawiki.org/wiki/Extension:Wikibase_Client)
---
### 腳本錯誤:函數“wdurl”不存在。
```bash
## 輸入
{{#invoke: Wikibase | wdurl }}
```
錯誤:腳本錯誤:函數“wdurl”不存在。
解法:Module:Module_name 的函數不存在,需要修改 Module。
{"metaMigratedAt":"2023-06-15T11:05:35.345Z","metaMigratedFrom":"Content","title":"Lua 模版快速取用 Wikidata","breaks":"true"}