混合コンテンツXMLのJSON Schema処理
テキストコンテンツと子要素・属性の両方を含む要素が、設定可能なテキストコンテンツキー(#textまたは_text)でどのように表現されるかを学びます。
Attributes
詳細な説明
混合コンテンツ:テキスト + 要素 + 属性
XMLでは、要素がテキストと子要素を交互に含むことができます。これは混合コンテンツと呼ばれます。変換ツールはテキストコンテンツ用の専用プロパティを、子要素・属性プロパティと並行して作成することで対応します。
XMLの例
<paragraph class="intro" id="p1">
This is <bold>important</bold> text with <link href="/docs">a link</link>.
</paragraph>
#textキーで生成されるスキーマ
{
"type": "object",
"properties": {
"paragraph": {
"type": "object",
"properties": {
"@class": { "type": "string" },
"@id": { "type": "string" },
"#text": { "type": "string" },
"bold": { "type": "string" },
"link": {
"type": "object",
"properties": {
"@href": { "type": "string" },
"#text": { "type": "string" }
}
}
}
}
}
}
テキストコンテンツキー
要素がテキストと子要素(またはテキストと属性)の両方を持つ場合、テキストコンテンツは特別なプロパティキーの下に配置されます。以下から選択できます:
#text— xml2jsや多くのXML-to-JSONライブラリで使用される一般的な規約_text— プロパティ名で#がサポートされないシステム向けの代替
#textが使用される場合
#textプロパティは要素が混合コンテンツを持つ場合にのみ出現します。テキストのみを含む要素(子要素なし、属性なし)は、別のテキストプロパティを必要とせず直接スカラー型にマッピングされます。
| 要素の内容 | スキーマ表現 |
|---|---|
| テキストのみ | スカラー型(string, number等) |
| テキスト + 属性 | #text + 属性プロパティのオブジェクト |
| テキスト + 子要素 | #text + 子要素プロパティのオブジェクト |
| 子要素のみ | 子要素プロパティのオブジェクト |
ユースケース
XHTMLコンテンツ、DocBookドキュメント、テキストとインライン要素が混在するXML形式を処理する場合。混合コンテンツの処理を理解することは、これらの形式をJSON Schemaで正確にモデリングするために不可欠です。