Files
shuowen-database/doc/FORMAT.md
2026-10-02 22:48:02 +08:00

160 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 說文解字代碼庫數據格式說明文檔
[說文解字](http://www.shuowen.org "說文解字") 代碼庫創建的目的就是讓更多朋友能夠直接改進內容和勘誤,因此,有必要將文件的格式以及編輯需要注意的事項作一些說明。
## 格式說明
所有文件都是以 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)。
下面結合 [說文解字](http://www.shuowen.org "說文解字") 代碼庫中的內容做一些簡單說明:
比如 “[帝](http://www.shuowen.org/view/7)” 字,代碼庫中的內容如下,
{
"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 種格式,
1. 左大括號 “{” 和右大括號 “}” 包含的內容,這種結構可以稱爲 “對象“,如果一個人就是一個對象,那麼這個人的姓名,年齡就可以理解爲這個人的屬性,也叫做 “「名稱/值」對” 。
2. 左中括號 “[” 和右中括號 “]” 包含的內容,這種結構可以理解爲 “列表”,如果還拿人來舉例,那麼這個人的愛好就可以用一個列表來表示。
如果用 JSON 來描述上面人的例子,結果如下,
{
"姓名": {
"姓": "張",
"名": "三"
},
"年齡": 36,
"愛好": ["書法", "編程", "發呆"]
}
從上面的例子我們可以看到,
1. 所有的字符串都需要用雙引號 「""」括起來。
2. 這2種結構可以被嵌套,比如姓名下面嵌套了另外一個對象,這個對象包含了 “姓” 和 “名” 這2個屬性。
2. 屬性的 “名稱” 和 “值” 之間是以 冒號「:」分隔
3. 多個屬性之間是以 逗號「,」 分隔,最後一個屬性不需要加 逗號「,」,因爲後面沒有其他屬性了,比如 “姓名” 這個對象的 “姓” 的值 “張” 後面有 逗號「,」,因爲後面還有另外一個屬性,而 “名” 的值 “三” 後面就沒有 逗號「,」,因爲後面沒有其他屬性了。
4. 列表的多個值之間也是用 逗號「,」分隔,最後一個值不需要加 逗號「,」。
內容中的空格不是必須的,但是爲了保證層級關係清楚,會給每個層級增加一個縮進,通常是 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"
]
}
特別需要注意的是,
1. 最後一個「名稱/值」對 和列表的最後一個內容都不能加逗號
2. 字符串必須要用雙引號括起來
也可以在編輯完內容後,使用線上的一些 JSON 驗證工具確認一下格式是否正確。比如: https://www.json.cn/