{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://kakitori.page/schemas/question.json","title":"Question","description":"kakitori.page の問題素材。kakitori の block spec へ機械的に変換できる最小単位","type":"object","required":["word","reading"],"additionalProperties":false,"properties":{"word":{"type":"string","minLength":1,"maxLength":16,"description":"出題する語の表記。漢字・かな・数字・アルファベット。文字種はスキーマでは制限せず、字形データの存在チェックで判定する"},"reading":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[ぁ-ゖー]+$","description":"語全体の読み。ひらがなと長音符のみ (数字・アルファベットの語も読みはひらがなで表す。例 ABC → えーびーしー)"},"sentences":{"type":"array","maxItems":8,"description":"例文 (任意、0件でもよい)。各文に word がそのまま部分文字列として含まれること (整合性ルール7)。ゲームは語の出現位置を特定して例文つきの書き取り・読み取り問題を合成できる。省略時は空配列として扱う。例文の文字には字形データの存在チェックを掛けない (句読点等を許す)","items":{"type":"string","minLength":1,"maxLength":40}},"segments":{"type":"array","minItems":1,"maxItems":16,"description":"文字単位の区切り。kakitori の annotation cellRange 生成に使う。省略時はサーバーが word を1文字1セグメントに分割して補完する (readingなし)","items":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":2,"description":"1文字 (Unicodeコードポイント1つ。サロゲートペアのため maxLength は2)"},"reading":{"type":"string","minLength":1,"maxLength":8,"pattern":"^[ぁ-ゖー]+$","description":"この文字に振るふりがなの表層形 (促音化・連濁した形。学校の学は「がっ」)。辞書上の音訓ではない。textがかな (送り仮名など) の場合はtext自身が読みなので省略する。textが漢字でも熟字訓など文字単位に割れない場合は省略"}}}}}}