1. ホーム
  2. xml

XMLのベストプラクティス:属性と追加要素 [重複]の比較

2023-08-09 19:25:42

質問

この2つの違いは何ですか、また、それぞれどのような場合に使用すればよいですか。

<person>
     <firstname>Joe</firstname>
     <lastname>Plumber</lastname>
</person>

<person firstname="Joe" lastname="Plumber" />

ありがとうございます。

どのように解決するのですか?

XMLには要素中心と属性中心があり、あなたの例では、最初のものが要素中心、2番目は 属性中心です。

ほとんどの場合、この2つのパターンは等価ですが、いくつかの例外があります。

属性中心(attribute centric

  • 要素中心より小さいサイズ。
  • ほとんどの XML パーサーは、ユーザー データは要素によって提示され、属性は要素を説明するために使用されると考えるので、あまり相互運用性がありません。
  • あるデータ型に対して nullable 値を提示する方法がありません。例えば nullable int です。
  • 複合型は表現できません。

要素中心

  • 複合型は要素ノードとしてのみ表示可能です。
  • 非常に相互運用性が高い
  • 属性中心よりサイズが大きい。(圧縮を使えばかなり小さくできる)。
  • Nullableなデータはxsi:nil="true"属性で表現できる。
  • パーサはユーザーデータのための要素だけを探すので、パースするのがより速いです。

実用的

XMLのサイズを本当に気にするのであれば、適切であればいつでも属性を使用してください。null 可能なもの、複雑な型、または大きなテキスト値を保持する必要がある場合は、要素を使用します。XML のサイズを気にしない場合、または転送時に圧縮を有効にする場合は、より拡張性の高い要素にこだわります。

背景

DOT NETでは、XmlSerializerはオブジェクトのプロパティを属性または要素のいずれかにシリアライズすることができます。 最近のWCFフレームワークでは、DataContractシリアライザーはプロパティを要素にのみシリアライズでき、XmlSerializerよりも高速です。理由は明らかで、デシリアライズ中に要素からユーザーデータを探す必要があるだけです。

同様に説明している記事があります。 要素 vs 属性