最新のWeb開発のチュートリアル
 

XML要素対属性


XMLでは、子要素を使用する属性を使用して、ときにするときについてのルールはありません。


要素対属性の使用

データは、子要素または属性に格納することができます。

これらの例を見てみましょう:

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

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

最初の例では、セックスは属性です。 最後に、セックスは子要素です。 どちらの例も、同じ情報を提供します。

子要素を使用する属性を使用して、ときにするときについてのルールはありません。 私の経験では、属性がHTMLに便利であるということですが、XMLであなたはそれらを回避しようとしてください。 情報は、データのように感じている場合は、子要素を使用します。


私の好みの方法

I like to store data in child elements.

以下の3つのXML文書は、まったく同じ情報が含まれています。

日付属性は、最初の例で使用されます。

<note date="12/11/2002">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

日付要素は、第二の例で使用されます。

<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

拡張した日付の要素は、第三に使用されます(THIS IS MY FAVORITE)

<note>
  <date>
    <day>12</day>
    <month>11</month>
    <year>2002</year>
  </date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

属性を使用しないでください?

あなたは、属性の使用を避けるべきでしょうか?

属性を持つ問題のいくつかは、次のとおりです。

  • 属性は複数の値を含めることはできません(child elements can)
  • 属性は、容易に拡張可能ではありません(for future changes)
  • 属性は構造記述することはできません(child elements can)
  • 属性は、プログラムコードによって操作することがより困難です
  • 属性値がDTDに対してテストするのは簡単ではありません

あなたはデータのコンテナとしての属性を使用する場合は、読み取りおよび維持することが困難な書類で終わります。 使用してみてくださいelementsデータを記述すること。 のみを使用したデータに関連しない情報を提供する属性。

このように終わるしないでください(this is not how XML should be used)

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

私の属性の規則の例外

ルールは常に例外を持っています。

属性についての私のルールは、1つの例外を除いがあります。

時々私は要素へのID参照を割り当てます。 これらのIDの参照は、名前またはIDは、HTMLの属性とほぼ同じ方法でXML要素にアクセスするために使用することができます。 この例では、このことを示しています。

<messages>
<note id="p501">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

<note id="p502">
  <to>Jani</to>
  <from>Tove</from>
  <heading>Re: Reminder</heading>
  <body>I will not!</body>
</note>
</messages>

これらの例のIDは、ちょうどカウンター、または一意の識別子、XMLファイル内の別のノートを識別するための、およびないノートデータの一部です。

私がここで言うことをしようとしていると、そのメタデータである(data about data)の属性として格納する必要があり、そのデータ自体を要素として格納する必要があります。