XMLテキスト値からの型推論を理解する
変換ツールがXMLテキストコンテンツと属性値からstring、number、integer、boolean型をどのように決定し、型のユニオンを処理するかを詳しく解説します。
Attributes
詳細な説明
型推論:単純な文字列を超えて
変換ツールはすべてのXMLテキスト値を文字列として扱うわけではありません。各値を分析して最も具体的なJSON Schema型を決定します。これにより、変換されたXMLデータの実際の形状をバリデーションできる、より有用なスキーマが生成されます。
推論ルール
| XML値 | 検出される型 | 理由 |
|---|---|---|
hello |
string | 非数値・非ブーリアンテキストのデフォルト |
42 |
integer | 安全な整数範囲内の整数 |
3.14 |
number | 小数 |
1.5e10 |
number | 科学的記法 |
true |
boolean | ブーリアンリテラルと完全一致 |
false |
boolean | ブーリアンリテラルと完全一致 |
| ``(空) | string | 空文字列はstringにデフォルト |
2024-01-15 |
string | 日付文字列はstringのまま(JSON Schemaに日付型はない) |
9999999999999999 |
string | 安全な整数範囲を超える数値 |
型のユニオン
同じ要素が複数のオカレンスで異なる型を含む場合、スキーマは型のユニオンを使用します:
<items>
<value>42</value>
<value>hello</value>
<value>true</value>
</items>
これは3つの<value>要素が異なる型を含むため、配列アイテムの型が["integer", "string", "boolean"]になります。
なぜ常にstringを使用しないのか
すべてをデフォルトでstringにする方が簡単ですが、生成されるスキーマの有用性が低下します。<price>要素がnumberであることを知っているスキーマは、変換されたJSONデータが実際に数値を含み、誤って文字列化されていないことを検証できます。これはXMLからJSONへの変換パイプラインでJSON Schemaがデータの検証に使用される場合に特に重要です。
エッジケース
- 先頭のゼロ:
007のような値は標準的な数値ではないため文字列として扱われます - 空白のみ: 空文字列として扱われます
- CDATAセクション: CDATA内のコンテンツは通常のテキストコンテンツと同様に処理されます
- Null: XMLにはnullの概念がありません — 空の要素は空文字列型にマッピングされます
ユースケース
生成されるスキーマに正確な型情報が必要な場合。XMLをJSONに変換して結果を検証するデータバリデーションパイプラインを構築する際に役立ちます。型推論を理解することで、スキーマ出力を予測し制御できます。