<img src="computer.gif"><a href="demo.html">
属性は、データの一部ではない情報を提供することがよくあります。次の例では、ファイル タイプはデータとは関係ありませんが、この要素を処理する必要があるソフトウェアにとっては重要です。
<file type="gif">computer.gif</file>
属性値は引用符で囲む必要がありますが、一重引用符と二重引用符の両方を使用できます。たとえば、人の性別である person 要素は次のように記述できます。
<人の性別="女性">
または、これも機能します:
<person sex='女性'>
属性値自体に二重引用符が含まれている場合は、次の例のように一重引用符を使用できます。
<ギャング名='ジョージ "ショットガン" ジーグラー'>
または、文字エンティティを使用することもできます。
<person sex="女性"><ファーストネーム>アンナ</ファーストネーム><ラストネーム>スミス</ラストネーム></person>
<人><性別>女性</性別><名>アンナ</名><姓>スミス</姓></人>
まず第一に、セックスは財産です。 2番目の例では、セックスは要素です。どちらのインスタンスも同じ情報を提供します。
いつ属性を使用し、いつ要素を使用するかを指示するルールはありません。私の経験では、HTML では属性を使用すると非常に便利ですが、XML では属性の使用を避ける必要があります。情報がデータによく似ている場合は、要素を使用します。
次の 3 つの XML ドキュメントには、まったく同じ情報が含まれています。
最初の例では date 属性が使用されています。
<note date="10/01/2008"><to>トーベ</to><from>ジャニ</from><Heading>リマインダー</Heading><body>今週末は私を忘れないでください!</body> ></note>
2 番目の例では、date 要素を使用します。
<note><date>2008 年 10 月 1 日</date><to>トーベ</to><from>ジャニ</from><見出し>リマインダー</Heading><本文>今週末は私を忘れないでください! </body></note>
3 番目の例では、拡張日付要素を使用しています (これは私のお気に入りです)。
<note><date><day>10</day><month>01</month><year>2008</year></date><to>トーベ</to><from>ジャニ</from> <Heading>リマインダー</Heading><body>今週末は私を忘れないでください!</body></note>
属性の使用によって生じるいくつかの問題:
属性には複数の値を含めることはできません(要素には含めることはできます)
属性にはツリー構造を含めることはできません(要素には含めることができます)
プロパティは簡単に拡張できません (将来の変更に備えて)
プロパティの読み取りと保守は困難です。要素を使用してデータを記述するようにしてください。代わりに、属性を使用してデータに依存しない情報を提供します。
次のような愚かなことはしないでください (これは XML の使用方法ではありません)。
<note day="10" month="01" year="2008"to="トーベ" from="ジャニ"Heading="リマインダー"body="今週末は私を忘れないでください!"></note>
ID 参照が要素に割り当てられる場合があります。これらの ID インデックスは、HTML の id 属性と同じ方法で XML 要素を識別するために使用できます。この例は、この状況を示しています。
<messages><note id="501"><to>トーベ</to><from>ジャニ</from><Heading>リマインダー</Heading><body>今週末は私を忘れないでください!</body> </note><note id="502"><to>ジャニ</to><from>トーベ</from><Heading>Re: リマインダー</Heading><body>私はしません</body></メモ></メッセージ>
上記の id 属性は、さまざまなノートを識別するために使用される単なる識別子です。ノートデータの一部ではありません。
ここで私たちが伝えようとしている考え方は、メタデータ (データに関するデータ) は属性として保存され、データ自体は要素として保存されるべきであるということです。
要約 XML 属性が従う必要があるルールは次のとおりです。
属性名は同じ開始タグまたは空要素タグ内に一度だけ出現することはできません
プロパティは、プロパティ シートで宣言されたドキュメント タイプ定義 (DTD) を使用して宣言する必要があります。
プロパティ値には、外部エンティティへの直接的または間接的なエンティティ参照を含めることはできません
直接または間接属性値と呼ばれるエンティティの置換テキストには、以下の記号を含めることはできません