XML設計の原則: IBMのUche Ogbujiによる要素と属性をいつ使用するかは、おそらくこの問題に関する最良のリソースの1つです。
決定の核となるのは、属性が「完了」したことです。変更したり、変更したり、ネストしたりすることはできません。これらは順序に依存せず、要素内で区別されます(同じものを2つ持つことはできません)。
これらの制約のいずれかが変更される可能性がある場合、データをXMLの子ノードにします。
あなたの例では、名前と年齢を持つ人がいます。ファーストネーム、ミドルネーム、ラストネーム、そしてニックネームがあります。そして、一部の人々は旧姓、複数のミドルネーム、または敬語を持っています- ジョン・ロナルド・リエル・トールキンをそのような構造にどのように入れますか?
そのため、2つのミドルネームがあり、それらに注文があります。これは、いいえ、属性はこれに最適な選択ではないことを明確に示す必要があります。
私は現在それを見つけることができませんが、上記のリンクされたドキュメントには、名前は「将来の記事でマークアップの人々の名前の扱いを拡大したい」につながる少し考えを必要とするものであるという声明があります。誰かがこれについてリードを持っている場合、コメントを残すか、この場所に編集してください。
一方、年齢はかなり固定された構造を持つものです(整数ではなく誕生日をお勧めします)。そのため、この情報をよく知られた理解された形式で表すことは、属性において意味があります。人には誕生日が1つだけあり、誕生日は1つだけで、保存する「順序付け」はありません。
Uche Ogbujiは、xml形式を適切に設計する際の3つの基本原則を特定しています。以下は、上記のリンクされたドキュメントからの引用を省略したものです。
- 構造化された情報の原理
情報が構造化された形式で表現されている場合、特に構造が拡張可能な場合は、要素を使用します。一方、情報がアトミックトークンとして表現されている場合は、属性を使用します
- 読みやすさの原則
情報が人によって読まれ、理解されることを意図している場合、要素を使用します。情報がマシンによって最も容易に理解され、消化される場合、属性を使用します。
- 要素/属性バインディングの原理要素の
値を別の属性によって変更する必要がある場合は、要素を使用します
そのため、名前には要素が必要です。これらはアトミックトークンではない構造化データであり、コンピューターよりも人間によって読み取られる可能性が高く、名前自体の別の属性によって変更される可能性があります。
日付は属性である必要があります-アトミックトークンであるデータであり、人間よりもコンピューターによって読み取られる可能性が高く(必要に応じて人間の好みの形式に変換されます)、最後に他のユーザーによって変更される可能性は低いですそれらの属性。