XMLの属性一覧と使い方完全ガイド

プログラミング・IT

「XMLの属性って何?」
「どんな属性があって、どう使うの?」

XMLファイルを見ていると、要素の中に「属性」というものが書かれていますよね。この属性を理解することで、XMLをより効果的に使えるようになります。

この記事では、XMLの属性について、基本から実践的な使い方まで詳しく解説していきます。よく使われる属性の一覧も紹介するので、すぐに活用できますよ。

スポンサーリンク
  1. 属性とは?
    1. 属性の基本
    2. 要素との違い
  2. 属性の書き方の基本ルール
    1. ルール1:属性値は必ず引用符で囲む
    2. ルール2:1つの要素に同じ属性は1回だけ
    3. ルール3:属性の順序は自由
    4. ルール4:空白を含む場合も引用符内に
    5. ルール5:特殊文字はエスケープする
  3. XMLの標準属性(グローバル属性)
    1. xml:lang(言語指定)
    2. xml:space(空白の扱い)
    3. xml:id(一意な識別子)
    4. xml:base(ベースURI)
  4. XML Schemaでよく使う属性
    1. xmlns(名前空間の宣言)
    2. xmlns:xsi(スキーマインスタンス)
    3. xsi:schemaLocation(スキーマの場所)
    4. xsi:type(データ型の指定)
    5. xsi:nil(NULL値)
  5. 用途別の属性例
    1. ID・識別子系
    2. 分類・カテゴリ系
    3. 日付・時刻系
    4. 数値・数量系
    5. 状態・フラグ系
    6. URL・リンク系
    7. 言語・地域系
    8. スタイル・表示系
  6. HTML/SVGでよく使う属性
    1. HTML属性
    2. SVG属性
  7. 属性と要素の使い分け
    1. 属性を使うべきケース
    2. 要素を使うべきケース
  8. プログラミング言語での属性の扱い
    1. Python
    2. JavaScript
    3. Java
    4. PHP
  9. ベストプラクティス
    1. 1. 命名規則を統一する
    2. 2. 属性値の型を明確にする
    3. 3. 必須属性と任意属性を区別する
    4. 4. デフォルト値を設定する
    5. 5. 属性の数を適度に保つ
  10. よくある質問と回答
    1. Q1. 属性と要素、どちらを優先すべき?
    2. Q2. 属性の順序に意味はある?
    3. Q3. 属性値に改行を含められる?
    4. Q4. 属性はいくつまで設定できる?
    5. Q5. 属性値を空にできる?
    6. Q6. 同じ名前の属性を名前空間で区別できる?
  11. まとめ

属性とは?

まず、基本的な概念から説明しますね。

属性の基本

属性(Attribute)とは、要素に追加情報を付与するための仕組みです。

基本的な構文:

<要素名 属性名="属性値">

実例:

<product id="001" category="electronics" stock="50">
    <name>ノートPC</name>
</product>

この例では、idcategorystockが属性です。

要素との違い

要素との比較:

要素で表現:

<product>
    <id>001</id>
    <category>electronics</category>
    <name>ノートPC</name>
</product>

属性で表現:

<product id="001" category="electronics">
    <name>ノートPC</name>
</product>

どちらも同じ情報を表現できますが、使い分けが重要です。

属性の書き方の基本ルール

XMLの属性には、守るべきルールがあります。

ルール1:属性値は必ず引用符で囲む

正しい書き方:

<product id="001">

間違い:

<product id=001>

シングルクォートでもOKです:

<product id='001'>

ルール2:1つの要素に同じ属性は1回だけ

間違い:

<product id="001" id="002">

同じ属性を複数回書くことはできません。

ルール3:属性の順序は自由

<!-- どちらも正しい -->
<product id="001" category="electronics">
<product category="electronics" id="001">

順序に意味はありませんが、統一すると読みやすくなります。

ルール4:空白を含む場合も引用符内に

<product name="ノート パソコン">

スペースがあっても、引用符で囲めば問題ありません。

ルール5:特殊文字はエスケープする

エスケープが必要な文字:

<product description="100&quot; screen">  <!-- " → &quot; -->
<product description="A &amp; B">         <!-- & → &amp; -->
<product description="value &lt; 10">     <!-- < → &lt; -->

XMLの標準属性(グローバル属性)

すべてのXML要素で使える標準的な属性です。

xml:lang(言語指定)

要素の言語を指定します。

使用例:

<document>
    <title xml:lang="ja">XMLの教科書</title>
    <title xml:lang="en">XML Textbook</title>
    <description xml:lang="ja">
        XMLの基礎から応用まで学べます
    </description>
</document>

言語コード例:

  • ja:日本語
  • en:英語
  • zh:中国語
  • ko:韓国語
  • fr:フランス語

xml:space(空白の扱い)

空白文字の扱い方を指定します。

使用例:

<code xml:space="preserve">
    function hello() {
        console.log("Hello");
    }
</code>

値の種類:

  • preserve:空白をそのまま保持
  • default:通常の処理(連続する空白を1つに)

xml:id(一意な識別子)

要素に一意のIDを付けます。

使用例:

<document>
    <section xml:id="intro">
        <title>はじめに</title>
    </section>
    <section xml:id="chapter1">
        <title>第1章</title>
    </section>
</document>

特徴:

  • 文書内で一意でなければならない
  • アルファベットで始まる必要がある

xml:base(ベースURI)

相対パスの基準となるURIを指定します。

使用例:

<document xml:base="http://example.com/docs/">
    <link href="page1.html"/>  <!-- http://example.com/docs/page1.html -->
    <link href="page2.html"/>  <!-- http://example.com/docs/page2.html -->
</document>

XML Schemaでよく使う属性

XMLスキーマで定義に使う属性です。

xmlns(名前空間の宣言)

<root xmlns="http://example.com/schema">
    <item>データ</item>
</root>

xmlns:xsi(スキーマインスタンス)

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</root>

xsi:schemaLocation(スキーマの場所)

<root 
    xmlns="http://example.com/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://example.com/schema schema.xsd">
</root>

xsi:type(データ型の指定)

<value xsi:type="xs:integer">123</value>
<value xsi:type="xs:string">text</value>

xsi:nil(NULL値)

<value xsi:nil="true"/>

NULL値を表現します。

用途別の属性例

実際によく使われる属性を用途別に紹介します。

ID・識別子系

<!-- 商品ID -->
<product id="P001" sku="ABC-123">

<!-- ユーザーID -->
<user id="12345" username="yamada">

<!-- ドキュメントID -->
<document ref="DOC-2024-001">

分類・カテゴリ系

<!-- カテゴリ -->
<product category="electronics" subcategory="computers">

<!-- タイプ -->
<item type="book" format="paperback">

<!-- クラス -->
<element class="important" level="high">

日付・時刻系

<!-- 作成日 -->
<article created="2024-11-14" modified="2024-11-14">

<!-- 有効期限 -->
<coupon valid-from="2024-01-01" valid-until="2024-12-31">

<!-- タイムスタンプ -->
<event timestamp="2024-11-14T10:30:00Z">

数値・数量系

<!-- 価格 -->
<product price="2800" currency="JPY">

<!-- 在庫 -->
<item stock="50" min-stock="10" max-stock="100">

<!-- サイズ -->
<image width="800" height="600" size="1024000">

状態・フラグ系

<!-- ステータス -->
<order status="shipped" paid="true">

<!-- 有効/無効 -->
<feature enabled="true" active="false">

<!-- 可視性 -->
<element visible="true" hidden="false">

URL・リンク系

<!-- リンク -->
<link href="http://example.com" target="_blank">

<!-- 画像ソース -->
<image src="photo.jpg" alt="写真の説明">

<!-- 参照 -->
<reference url="http://example.com" rel="external">

言語・地域系

<!-- 言語 -->
<text lang="ja" country="JP">

<!-- ロケール -->
<content locale="ja_JP" charset="UTF-8">

スタイル・表示系

<!-- 色 -->
<text color="#FF0000" bgcolor="#FFFFFF">

<!-- フォント -->
<text font="Arial" size="12" weight="bold">

<!-- 配置 -->
<element align="center" valign="middle">

HTML/SVGでよく使う属性

XMLベースのHTML/SVGでの属性例です。

HTML属性

<!-- リンク -->
<a href="page.html" target="_blank" rel="noopener">

<!-- 画像 -->
<img src="image.jpg" alt="説明" width="300" height="200"/>

<!-- 入力フォーム -->
<input type="text" name="username" value="" placeholder="ユーザー名"/>

<!-- ボタン -->
<button type="submit" disabled="disabled">送信</button>

SVG属性

<!-- 円 -->
<circle cx="50" cy="50" r="40" fill="red" stroke="black" stroke-width="2"/>

<!-- 矩形 -->
<rect x="10" y="10" width="100" height="50" fill="blue"/>

<!-- パス -->
<path d="M10 10 L90 90" stroke="black" stroke-width="2"/>

<!-- テキスト -->
<text x="50" y="50" font-size="16" fill="black">テキスト</text>

属性と要素の使い分け

どちらを使うべきか、判断基準を紹介します。

属性を使うべきケース

以下の場合は属性が適切:

  1. メタデータ(データについての情報)
<article id="A001" author="山田太郎" date="2024-11-14">
    <title>記事のタイトル</title>
    <content>本文...</content>
</article>
  1. 短い識別情報
<product id="P001" sku="ABC-123">
  1. 列挙型の値
<item status="active" type="book" priority="high">

要素を使うべきケース

以下の場合は要素が適切:

  1. 構造化されたデータ
<person>
    <name>
        <first>太郎</first>
        <last>山田</last>
    </name>
</person>
  1. 複数行のテキスト
<article>
    <content>
        長い本文がここに入ります。
        複数行にわたる場合は要素を使います。
    </content>
</article>
  1. 繰り返しが必要なデータ
<person>
    <phone>090-1234-5678</phone>
    <phone>03-1234-5678</phone>
</person>
  1. 将来的に構造が複雑になる可能性
<!-- 今は単純だが将来複雑になるかも -->
<address>
    <street>1-1-1</street>
    <city>千代田区</city>
</address>

プログラミング言語での属性の扱い

各言語で属性をどう扱うか見ていきましょう。

Python

import xml.etree.ElementTree as ET

# XMLの読み込み
xml_text = '<product id="001" name="ノートPC" price="120000"/>'
root = ET.fromstring(xml_text)

# 属性の取得
product_id = root.get('id')
name = root.get('name')
price = root.get('price')

print(f'ID: {product_id}, 名前: {name}, 価格: {price}')

# 属性の設定
root.set('stock', '50')

# 全属性の取得
attributes = root.attrib
print(attributes)  # {'id': '001', 'name': 'ノートPC', ...}

JavaScript

const xmlText = '<product id="001" name="ノートPC" price="120000"/>';
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");

const product = xmlDoc.documentElement;

// 属性の取得
const id = product.getAttribute('id');
const name = product.getAttribute('name');
const price = product.getAttribute('price');

console.log(`ID: ${id}, 名前: ${name}, 価格: ${price}`);

// 属性の設定
product.setAttribute('stock', '50');

// 属性の有無を確認
const hasPrice = product.hasAttribute('price');  // true

// 属性の削除
product.removeAttribute('price');

Java

import org.w3c.dom.*;
import javax.xml.parsers.*;

Element product = ...; // XMLから取得した要素

// 属性の取得
String id = product.getAttribute("id");
String name = product.getAttribute("name");

// 属性の設定
product.setAttribute("stock", "50");

// 属性の有無を確認
boolean hasPrice = product.hasAttribute("price");

// 全属性の取得
NamedNodeMap attributes = product.getAttributes();

PHP

$xmlText = '<product id="001" name="ノートPC" price="120000"/>';
$xml = simplexml_load_string($xmlText);

// 属性の取得
$id = (string)$xml['id'];
$name = (string)$xml['name'];
$price = (string)$xml['price'];

echo "ID: $id, 名前: $name, 価格: $price";

// 属性の設定
$xml['stock'] = '50';

// 全属性の取得
$attributes = $xml->attributes();
foreach ($attributes as $key => $value) {
    echo "$key = $value\n";
}

ベストプラクティス

属性を効果的に使うための推奨事項です。

1. 命名規則を統一する

推奨パターン:

<!-- ケバブケース(推奨) -->
<product product-id="001" created-date="2024-11-14">

<!-- キャメルケース -->
<product productId="001" createdDate="2024-11-14">

プロジェクト内で統一しましょう。

2. 属性値の型を明確にする

<!-- 数値 -->
<item quantity="10" price="2800.00">

<!-- 真偽値 -->
<feature enabled="true" visible="false">

<!-- 日付 -->
<event date="2024-11-14">

3. 必須属性と任意属性を区別する

XMLスキーマで定義:

<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string" use="optional"/>

4. デフォルト値を設定する

<xs:attribute name="active" type="xs:boolean" default="true"/>

5. 属性の数を適度に保つ

良い例:

<product id="001" name="ノートPC" price="120000">

悪い例(属性が多すぎ):

<product id="001" name="ノートPC" price="120000" 
         category="electronics" brand="ABC" 
         color="silver" weight="1.5" 
         width="30" height="20" depth="2">

多すぎる場合は子要素を使いましょう。

よくある質問と回答

Q1. 属性と要素、どちらを優先すべき?

A. 基本的には要素を使い、メタデータや短い識別情報に属性を使うのが一般的です。迷ったら要素を選ぶ方が無難です。

Q2. 属性の順序に意味はある?

A. いいえ、XMLの仕様上、属性の順序に意味はありません。ただし、可読性のため統一した順序で書くことをおすすめします。

Q3. 属性値に改行を含められる?

A. 技術的には可能ですが、推奨されません。複数行のテキストは要素を使うべきです。

Q4. 属性はいくつまで設定できる?

A. 技術的な制限はありませんが、可読性のため5〜7個程度までが目安です。

Q5. 属性値を空にできる?

A. はい、可能です。

<element attribute="">

ただし、必須属性の場合は空にできません。

Q6. 同じ名前の属性を名前空間で区別できる?

A. はい、名前空間プレフィックスを使えば可能です。

<element app:id="001" db:id="123">

まとめ

XMLの属性についてまとめます。

属性の基本:

  • 要素に追加情報を付与する仕組み
  • 属性名="属性値"の形式
  • 引用符で囲む必要がある

標準属性:

  • xml:lang:言語指定
  • xml:space:空白の扱い
  • xml:id:一意な識別子
  • xml:base:ベースURI

使い分けのポイント:

  • メタデータ → 属性
  • 構造化データ → 要素
  • 短い識別情報 → 属性
  • 複数行テキスト → 要素

ベストプラクティス:

  • 命名規則を統一
  • 属性の数を適度に保つ
  • 型を明確にする
  • デフォルト値を設定

属性を適切に使うことで、XMLがより読みやすく、処理しやすくなります。要素との使い分けを意識しながら、効果的に活用しましょう。

この記事が、あなたのXML活用の役に立てば嬉しいです!

コメント

タイトルとURLをコピーしました