XMLでエレメントと属性のどっちに持たせるか問題

XMLスキーマを設計しているといつも悩む。

<person>
  <id>1</id>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>
<person id="1">
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

データ項目をエレメントと属性のどちらに持たせるか。StackOverflowにこの件に関して記事があった。

stackoverflow.com

まとめると次の通り。

  • 木構造にできるし、複数繰り返せるのでエレメントの方が優位
  • 属性は将来的な拡張性が無い
  • データはエレメント。データのメタデータは属性