混合コンテンツ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で正確にモデリングするために不可欠です。

試してみる — XML to JSON Schema

フルツールを開く