XMLチュートリアル

XMLホーム XMLの紹介 XML使用方法 XMLツリー XML構文 XML要素 XML属性 XML名前空間 XML表示 XML HttpRequest XMLパーサー XML DOM XML XPath XML XSLT XML XQuery XML XLink XMLバリデーター XML DTD XMLスキーマ XMLサーバー XMLの例 XMLクイズ XML証明書

XML AJAX

AJAXの紹介 AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

XML DOM

DOMの紹介 DOMノード DOMアクセス DOMノード情報 DOMノードリスト DOMトラバース DOMナビゲーション DOMは値を取得します DOM変更ノード DOM削除ノード DOM置換ノード DOM作成ノード DOM追加ノード DOMクローンノード DOMの例

XPathチュートリアル

XPathの概要 XPathノード XPath構文 XPath軸 XPath演算子 XPathの例

XSLTチュートリアル

XSLTの紹介 XSL言語 XSLT変換 XSLT <テンプレート> XSLT <値> XSLT <for-each> XSLT <ソート> XSLT <if> XSLT <選択> XSLT適用 クライアント上のXSLT サーバー上のXSLT XSLT Edit XML XSLTの例

XQueryチュートリアル

XQueryの紹介 XQueryの例 XQuery FLWOR XQuery HTML XQueryの用語 XQuery構文 XQuery追加 XQuery Select XQuery関数

XML DTD

DTDの紹介 DTDビルディングブロック DTD要素 DTD属性 DTD要素と属性 DTDエンティティ DTDの例

XSDスキーマ

XSDの概要 XSDハウツー XSD <スキーマ> XSD要素 XSD属性 XSDの制限

XSDコンプレックス

XSD要素 XSDが空です XSD要素のみ XSDテキストのみ XSD混合 XSDインジケーター XSD <任意> XSD <anyAttribute> XSD置換 XSDの例

XSDデータ

XSD文字列 XSD日付 XSD数値 XSDその他 XSDリファレンス

Webサービス

XMLサービス XML WSDL XML SOAP XML RDF XML RSS

参考文献

DOMノードタイプ DOMノード DOM NodeList DOM NamedNodeMap DOMドキュメント DOM要素 DOM属性 DOMテキスト DOM CDATA DOMコメント DOM XMLHttpRequest DOMパーサー XSLT要素 XSLT / XPath関数

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では避けてください。情報がデータのように感じられる場合は、子要素を使用します。


私の好きな方法

子要素にデータを保存するのが好きです。

次の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>

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

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

展開された日付要素が3番目に使用されます:(これは私のお気に入りです):

<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>


属性の使用を避けますか?

属性の使用を避けるべきですか?

属性に関する問題のいくつかは次のとおりです。

  • 属性に複数の値を含めることはできません(子要素は含めることができます)
  • 属性は簡単に拡張できません(将来の変更のために)
  • 属性は構造を記述できません(子要素は記述できます)
  • 属性はプログラムコードで操作するのがより困難です
  • 属性値をDTDに対してテストするのは簡単ではありません

データのコンテナとして属性を使用すると、ドキュメントの読み取りと保守が困難になります。要素を使用してデータを記述してみてください。属性は、データに関連しない情報を提供する場合にのみ使用してください。

このようになってはいけません(これはXMLの使用方法ではありません):

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

属性ルールの例外

ルールには常に例外があります。

属性に関する私のルールには1つの例外があります。

時々私は要素にID参照を割り当てます。これらのID参照は、HTMLのNAMEまたはID属性とほぼ同じ方法で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ファイル内のさまざまなメモを識別するための単なるカウンターまたは一意の識別子です。

ここで私が言おうとしているのは、メタデータ(データに関するデータ)は属性として保存する必要があり、データ自体は要素として保存する必要があるということです。