XML属性

XML要素には、HTMLのように属性があります。

属性(Attribute)は、要素に関する追加情報を提供します。

XML属性

HTMLにも、属性は要素に関する追加情報を提供します。

<img src="computer.gif">
<a href="demo.html">

属性は通常、データに所属しない情報を提供します。 次の実例では、ファイルの種類はデータとは関係ありませんが、この要素を処理する必要があるソフトウェアにとって重要です。

<file type="gif">computer.gif</file>

XML属性は引用符で囲む必要がある

属性値は引用符で囲む必要がありますが、一重引用符と二重引用符どちらも使用できます。例えば、人の性別、person要素は下記のように記入できます。

<person sex="female">

このように記入してもいいです。

<person sex='female'>

属性値が二重引用符で囲んでいる場合には、下記のように一重引用符を使用できます。

<gangster name='George "Shotgun" Ziegler'>

文字実体参照も使用できます。

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML要素vs.属性

下記の実例をご覧ください。

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

最初の実例では、sexが属性です。 2番目の実例では、sexが要素です。 どちらの実例でも同じ情報を提供します。

属性と要素を使用するタイミングを指定するルールはありません。著者の経験では、HTMLでは属性は非常に便利ですが、XMLでは属性の使用をできるだけ避ける必要があります。情報がデータに似ている場合は、要素を使用しましょう。

著者が推奨の使い方

次の3つのXMLドキュメントには、まったく同じ情報が含まれています。

最初の実例では、date属性が使用されています。

<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

2番目の実例では、date要素が使用されています。

<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

3番目の実例では、拡張のdate要素が使用されています。(推奨)

<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XML属性を避ける理由

下記のは属性によって引き起こされるいくつかの問題:

  • 属性に複数の値を含めることはできません。(要素は含めることができます)
  • 属性にツリー構造を含めることはできません。(要素に含めることができます)
  • 属性は拡張しにくいです(未来の変更)

属性の読み取りと維持は難しいです。要素を使用してデータを説明してみてください。その代わりに、属性のみを使用して、データに関係のない情報を提供します。

このやり方は推奨しません。(これはXMLの正しい使い方ではありません)

<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

メタデータのXML属性について

ID参照が要素に割り当てられる場合があります。 これらのIDインデックスは、XML要素を識別するために使用でき、HTMLの役割はid属性と同じです。下記の実例は、この状況を示しています。

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

上記のid属性は単なる識別子であり、さまざまなメモを識別するために使用されます。 メモデータに属しません。

今まで説明したい考え方は、メタデータ(データに関するデータ)を属性として保存し、データ自体を要素として保存する必要があるということです。

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です