7.6 KiB
7.6 KiB
說文解字代碼庫數據格式說明文檔
說文解字 代碼庫創建的目的就是讓更多朋友能夠直接改進內容和勘誤,因此,有必要將文件的格式以及編輯需要注意的事項作一些說明。
格式說明
所有文件都是以 JSON 格式存儲,關於 JSON,可以參考 http://json.org 上面的說明:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
下面結合 說文解字 代碼庫中的內容做一些簡單說明:
比如 “帝” 字,代碼庫中的內容如下,
{
"id": 7,
"wordhead": "帝",
"explanation": "諦也。王天下之號也。从丄朿聲。",
"volume": "01",
"radical": "丄",
"pronunciation": "都計切",
"variants": [
{
"wordhead": "𢂇",
"explanation": "古文帝。古文諸丄字皆从一,篆文皆从𠄞。𠄞,古文上字。䇂示辰龍童音章皆从古文丄。",
"seal_character": "三"
}
],
"seal_character": "丈",
"pinyin": "di",
"pinyin_full": "dì",
"components": [
"一",
"上",
"朿"
],
"xuan_note": "",
"kai_note": "",
"duan_notes": [
{
"explanation": "諦也。",
"note": "見春秋元命苞、春秋運斗樞。毛詩故訓傳曰。審諦如帝。"
},
{
"explanation": "王天下之號。从二。朿<>聲。",
"note": "都計切。古音第十六部。"
},
{
"explanation": "古文帝。古文諸丄字皆从一。篆文皆从𠄞。𠄞古文上字。",
"note": "古文从一。小篆从古文上者。古今體異。必云𠄞古上字者。明非二字也。徐鍇曰。古文上兩畫、上短下長。一二之二、則兩畫齊等。䇂俗本䇂下有言。非也。言从䇂。舉䇂可以包言。"
},
{
"explanation": "示辰龍童音章皆从古文上。",
"note": "古文示作𥘅。古文禮作𠃞。古文辰作𠨷。此古文从一、小篆从𠄞之證。然則古文以一爲𠄞。六書之假借也。"
}
],
"indexes": [
"帝",
"𢂇"
]
}
結合 JSON 結構的定義,我們可以看到,上面的代碼主要有 2 種格式,
- 左大括號 “{” 和右大括號 “}” 包含的內容,這種結構可以稱爲 “對象“,如果一個人就是一個對象,那麼這個人的姓名,年齡就可以理解爲這個人的屬性,也叫做 “「名稱/值」對” 。
- 左中括號 “[” 和右中括號 “]” 包含的內容,這種結構可以理解爲 “列表”,如果還拿人來舉例,那麼這個人的愛好就可以用一個列表來表示。
如果用 JSON 來描述上面人的例子,結果如下,
{
"姓名": {
"姓": "張",
"名": "三"
},
"年齡": 36,
"愛好": ["書法", "編程", "發呆"]
}
從上面的例子我們可以看到,
- 所有的字符串都需要用雙引號 「""」括起來。
- 這2種結構可以被嵌套,比如姓名下面嵌套了另外一個對象,這個對象包含了 “姓” 和 “名” 這2個屬性。
- 屬性的 “名稱” 和 “值” 之間是以 冒號「:」分隔
- 多個屬性之間是以 逗號「,」 分隔,最後一個屬性不需要加 逗號「,」,因爲後面沒有其他屬性了,比如 “姓名” 這個對象的 “姓” 的值 “張” 後面有 逗號「,」,因爲後面還有另外一個屬性,而 “名” 的值 “三” 後面就沒有 逗號「,」,因爲後面沒有其他屬性了。
- 列表的多個值之間也是用 逗號「,」分隔,最後一個值不需要加 逗號「,」。
內容中的空格不是必須的,但是爲了保證層級關係清楚,會給每個層級增加一個縮進,通常是 4 個空格字符。
數據格式中屬性的含義
{
"id": "字頭編號",
"wordhead": "字頭",
"explanation": "說文解字對於字頭的解釋",
"volume": "字頭所在的卷數",
"radical": "字頭所屬的說文部首",
"pronunciation": "反切",
"variants": [
{
"wordhead": "重文1的字頭",
"explanation": "說文解字對於重文1字頭的解釋",
"seal_character": "重文1的小篆字型(此屬性無須修改)"
},
{
"wordhead": "重文2的字頭",
"explanation": "說文解字對於重文2字頭的解釋",
"seal_character": "重文2的小篆字型(此屬性無須修改)"
},
... 更多重文,以逗號分隔,最後一個重文無須加逗號
{
"wordhead": "重文 N 的字頭",
"explanation": "說文解字對於重文 N 字頭的解釋",
"seal_character": "重文 N 的小篆字型(此屬性無須修改)"
}
],
"seal_character": "字頭的小篆字型(此屬性無須修改)",
"pinyin": "無聲調的拼音",
"pinyin_full": "包含聲調的拼音",
"components": [
"構件1,以逗號分隔",
"構件2,以逗號分隔",
"最後一個構件不需要加逗號"
],
"xuan_note": "徐鉉註釋",
"kai_note": "徐楷註釋",
"duan_notes": [
{
"explanation": "段玉裁說文解字注中摘錄的說文解字原文1",
"note": "段玉裁說文解字注中對說文解字原文1的註釋"
},
{
"explanation": "段玉裁說文解字注中摘錄的說文解字原文2",
"note": "段玉裁說文解字注中對說文解字原文2的註釋"
},
... 更多段玉裁說文解字注,以逗號分隔,最後一個無須加逗號
{
"explanation": "段玉裁說文解字注中摘錄的說文解字原文 N",
"note": "段玉裁說文解字注中對說文解字原文 N 的註釋"
}
],
"indexes": [
"字頭搜索索引1,比如搜索“餘”和“余”都能找到“餘”,那我們就稱“餘”和“余”是“餘”的索引",
"字頭搜索索引2",
... 更多字頭索引,最後一個無須加逗號
"字頭搜索索引 N"
]
}
特別需要注意的是,
- 最後一個「名稱/值」對 和列表的最後一個內容都不能加逗號
- 字符串必須要用雙引號括起來
也可以在編輯完內容後,使用線上的一些 JSON 驗證工具確認一下格式是否正確。比如: https://www.json.cn/