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

7.6 KiB
Raw Permalink Blame History

說文解字代碼庫數據格式說明文檔

說文解字 代碼庫創建的目的就是讓更多朋友能夠直接改進內容和勘誤,因此,有必要將文件的格式以及編輯需要注意的事項作一些說明。

格式說明

所有文件都是以 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 種格式,

  1. 左大括號 “{” 和右大括號 “}” 包含的內容,這種結構可以稱爲 “對象“,如果一個人就是一個對象,那麼這個人的姓名,年齡就可以理解爲這個人的屬性,也叫做 “「名稱/值」對” 。
  2. 左中括號 “[” 和右中括號 “]” 包含的內容,這種結構可以理解爲 “列表”,如果還拿人來舉例,那麼這個人的愛好就可以用一個列表來表示。

如果用 JSON 來描述上面人的例子,結果如下,

{
    "姓名": {
        "姓": "張",
        "名": "三"
    },
    "年齡": 36,
    "愛好": ["書法", "編程", "發呆"]
}

從上面的例子我們可以看到,

  1. 所有的字符串都需要用雙引號 「""」括起來。
  2. 這2種結構可以被嵌套,比如姓名下面嵌套了另外一個對象,這個對象包含了 “姓” 和 “名” 這2個屬性。
  3. 屬性的 “名稱” 和 “值” 之間是以 冒號「:」分隔
  4. 多個屬性之間是以 逗號「,」 分隔,最後一個屬性不需要加 逗號「,」,因爲後面沒有其他屬性了,比如 “姓名” 這個對象的 “姓” 的值 “張” 後面有 逗號「,」,因爲後面還有另外一個屬性,而 “名” 的值 “三” 後面就沒有 逗號「,」,因爲後面沒有其他屬性了。
  5. 列表的多個值之間也是用 逗號「,」分隔,最後一個值不需要加 逗號「,」。

內容中的空格不是必須的,但是爲了保證層級關係清楚,會給每個層級增加一個縮進,通常是 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/