XMLの属性
XML要素は開始タグに属性を含むことができます。HTMLと同様です。
属性(Attribute)は要素に関する追加情報を提供します。
XML属性には引用符が必要です
属性値は引用符で囲まなければなりませんが、シングルクォートとダブルクォートのどちらも使用できます。
例えば、人の性別を表す場合、<person>タグは以下のように書かれます:
<person gender="female">
または以下のようにもできます:
<person gender='female'>
属性値が双引号を含む場合、シングルクォートを使用できます。以下の例を参照してください:
<gangster name='George "Shotgun" Ziegler'>
またはキャラクターエンティティを使用できます:
<gangster name="George "Shotgun" Ziegler">
XML要素と属性
これらの例を確認してください:
<person gender="female"> <firstname>Anna</firstname> <lastname>Smith</lastname> </person> <person> <gender>female</gender> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
第1つの例では、sexは属性です。第2つの例では、sexは子要素です。両方の例は同じ情報を提供できます。
XMLには、属性を使用するか子要素を使用するかを決定するルールはありません。私の経験では、HTMLでは属性が便利ですが、XMLでは属性の使用を避けるべきです。情報がデータのように感じる場合は、子要素を使用してください。
私が好きな方法
以下の3つのXMLドキュメントは、完全に同じ情報を含んでいます:
第1つの例では、date属性を使用しています:
<note date="2008-01-10"> <to>George</to> <from>John</from> </note>
第2つの例では、<date>要素を使用しています:
<note> <date>2008-01-10</date> <to>George</to> <from>John</from> </note>
第3つの例では、拡張されたdate要素を使用しています(これは私の大好きなものです):
<note> <date> <year>2008</year> <month>01</month> <day>10</day> </date> <to>George</to> <from>John</from> </note>
属性を使用しないことを避けるべきですか?
属性を使用する際に考慮すべきいくつかの点は:
- 属性には複数の値を含むことができません(要素はできます)
- 属性は木構造を説明することができません(要素はできます)
- 属性は拡張しにくい(将来の変更のために)
データを説明するために要素をできるだけ使用してください。属性を使用してデータに関係のない情報を提供するだけでなくです。
こんな愚かなことをしないでください(これはXMLが使われるべき方法ではありません):
<note day="10" month="01" year="2008" to="George" from="John" heading="Reminder" body="Don't forget the meeting!" </note>
メタデータのXML属性
時々、要素にIDを割り当てることがあります。これらのIDインデックスは、XML要素を識別するために使用され、HTMLのID属性と同じように機能します。この例では、そのような状況を示しています:
<messages> <note id="501"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <note id="502"> <to>John</to> <from>George</from> <heading>Re: Reminder</heading> <body>I will not</body> </note> </messages>
上記の ID は、異なるタグを識別するための識別子に過ぎず、タグデータの一部ではありません。
ここで強く伝えたい理念は、メタデータ(データに関するデータ)は属性として、データ自体は要素として保存されるべきです。