XML / JSON / handoff guide

XMLをJSONへ渡す前に属性・namespace・順序を確認する

JSONへ変換できても、属性・namespace・兄弟要素の順序・mixed contentが同じ意味とは限りません。情報損失候補を先に分けます。

属性とnamespaceを明示する

XML属性をJSONの要素値へ黙って混ぜず、属性専用のキー方針を決めます。namespaceはprefixの文字列ではなくURIが識別子です。prefixが変わってもURIの意味を失わないように記録します。

<item xmlns:x="urn:example" x:id="7">A</item>
→ element text: "A"
→ attribute: x:id = "7"
→ namespace URI: urn:example (prefix x may change)
境界確認すること
attribute属性と要素値を別欄で表し、同名衝突の方針を決める。
namespaceprefixではなくnamespace URIを保持し、未定義prefixを補完しない。
order意味のある兄弟要素の順序を配列などで保持する。
repeated element同名要素を最後の値で上書きせず、配列化の方針を確認する。

mixed contentは損失リスク

<p>before<b>bold</b>after</p>のようにテキストと子要素が混ざるXMLは、単一のJSON文字列へ潰すと順序や装飾の境界を失います。専用のparts配列など、受け側の表現を先に合意します。

既存のローカルXML→JSON converterは変換結果を確認する道具です。このガイドは情報損失候補と受渡し方針を確認するもので、全XMLをlosslessに変換できるとは言いません。

既存のXML→JSON converterを開く

レビューケース

case判定確認
attribute-boundaryexplicit-attribute-policy属性専用キーと要素値の衝突を決める。
namespace-identityuri-preserved-prefix-may-changeURIを保持し、prefixだけに依存しない。
sibling-orderorder-preserved意味のある子要素の順序を配列で残す。
repeated-elementarray-policy同名要素を配列にするか明示する。
mixed-contentloss-risktextと子要素の順序を一つの文字列に潰さない。
unsupported-or-uploadreject曖昧なmappingやuploadは差し戻す。

入力を送信しない

このガイドはXMLを外部へ送信せず、schema推論や外部XPathサービスを呼びません。本番の秘密、認証情報、個人情報を貼り付けず、無害なfixtureで確認してください。