XMLとは何か、ドキュメント構造と動作原理

著者: IT Sectr 公開日: 2026-03-08 読了時間: 8 分

XML(eXtensible Markup Language)は、カスタムタグを使用して構造化データを保存および転送するためのテキスト形式です。設定ファイル、Webサービス、Android開発で広く使用されています。W3Cコンソーシアムによると、XML仕様は2008年から安定した標準であり続けています。XMLは、スキーマによる検証機能を備えた厳格なデータ構造を提供します。

重要なポイント

  • XML — 構造化データのためのカスタムタグを持つ拡張可能なマークアップ言語
  • 厳格な構造 — 必須の終了タグ、ルート要素、XSDによる検証
  • 名前空間 — 1つのドキュメント内での名前の競合を回避する仕組み
  • XSLT — XMLを他の形式に変換:HTML、PDF、CSV
  • Android開発 — XMLはレイアウト、マニフェスト、リソースに使用

XMLとは?

XMLは、人間と機械の両方が読み取り可能な形式でドキュメントをエンコードするためのルールセットを定義するマークアップ言語です。HTMLとは異なり、XMLには固定のタグセットはありません—開発者はデータ構造に対応する独自のタグを作成します。

XMLは1996年にW3CコンソーシアムによってSGML(Standard Generalized Markup Language)の簡略化されたサブセットとして開発されました。XMLの主な目的は、コンテンツをデータのプレゼンテーションから分離することです。外観を記述するHTMLとは異なり、XMLはデータの構造と意味を記述します。

XMLの重要な特性は拡張性です。プロジェクトに新しいデータ型が登場した場合、開発者は既存の構造を変更せずに新しいタグを追加するだけです。これにより、XMLは長期的なデータ保存と異なるシステム間の交換に便利です。

XMLの主な応用分野

  • Android開発 — レイアウトファイル、マニフェスト、リソース(strings、colors、themes)
  • 設定 — Maven POM、Ant build、Web設定(web.xml)
  • Webサービス — SOAP、XML-RPC、RSS/Atomフィード
  • ドキュメントワークフロー — SVG、DocBook、Office Open XML
  • データベース — SQL Server(XML型)、Oracle、PostgreSQL

XMLの構文と構造

XMLの構文はHTMLよりも厳格です。各開始タグには対応する終了タグが必要で、属性は引用符で囲み、タグ名は大文字と小文字を区別します。ドキュメントには、他のすべてを含むルート要素が1つだけ必要です。

XMLドキュメントは、XMLバージョンとエンコーディングを指定する宣言で始めることができます。その後、ルート要素が続き、その中にネストされた要素、属性、テキストコンテンツ、コメントを含めることができます。空の要素は<element />として記述されます。

xml
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
    <book id="bk001">
        <title>XML Developer Guide</title>
        <author>John Smith</author>
        <price currency="USD">29.99</price>
        <published>2026-03-15</published>
    </book>
    <book id="bk002">
        <title>Advanced XML Schemas</title>
        <author>Jane Doe</author>
        <price currency="USD">49.99</price>
        </book>
</catalog>

整形式XMLのルール

整形式(Well-formed)XMLは基本ルールに従う必要があります。各開始タグには終了タグが必須で、ネストは厳格(タグの重なりは禁止)、属性値は常に引用符で囲みます。ルールに違反すると、ドキュメントは無効になり解析できなくなります。

  1. 1つのルート要素 — ドキュメントには正確に1つのルートが含まれる
  2. 正しいネスト — タグは重なってはいけない
  3. 終了タグ — 自己終了タグを除くすべての要素に必須
  4. 大文字と小文字の区別 — <Book>と<book>は異なる要素
  5. 属性の引用符 — 属性値は二重引用符または一重引用符で囲む

XMLの名前空間とスキーマ

XML名前空間は、1つのドキュメントで異なる語彙の要素を使用する際の名前の競合問題を解決します。名前空間は、語彙を一意に識別するURIを持つxmlns属性によって定義されます。

XML Schema(XSD)は、XMLドキュメントの構造を記述するための言語です。XSDは、許可される要素と属性、そのデータ型、必須性、制約を定義します。スキーマにより、処理前にドキュメントを自動検証でき、これは統合ソリューションにとって重要です。

技術 目的
DTD 基本構造の検証 古く、機能が少ない
XSD 厳格な型付けと検証 業界標準
RELAX NG XSDのコンパクトな代替 XSDよりシンプルで読みやすい
XSLT XMLを他の形式に変換 XMLからHTML、PDF、CSV
XPath ナビゲーションとノード選択 XMLツリーへのクエリ

モバイル開発におけるXML

XMLはAndroid開発で重要な役割を果たします。Androidオペレーティングシステムは、ユーザーインターフェース(レイアウトファイル)、アプリケーション設定(AndroidManifest.xml)、リソース(strings、colors、themes)、ベクターグラフィック(VectorDrawable)を記述するためにXMLを使用します。iOSでは、XMLは主にStoryboardと設定plistファイルに使用され、頻度は低くなります。

Androidでは、各アプリケーション画面はViewコンポーネント(ConstraintLayout、LinearLayout、TextView、Button)の階層を持つXMLファイルで記述されます。このアプローチは、アプリケーションのロジックをプレゼンテーションから分離し、メンテナンスと異なる画面への適応を簡素化します。リソースXMLファイルにより、コードを変更せずにアプリケーションをローカライズできます。

Androidレイアウトの例

典型的なレイアウトファイルには、ネストされた要素を持つルートConstraintLayoutが含まれ、各要素には位置、サイズ、スタイルの属性があります。Androidは起動時のパフォーマンス最適化のためにXMLをAXMLバイナリ形式にコンパイルします。

xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/welcome"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/click"
        app:layout_constraintTop_toBottomOf="@id/title"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

モバイルプラットフォームでのXMLパース

XMLパースはモバイルプラットフォームで2つの主要なアプローチで実行されます。DOM(Document Object Model)はドキュメント全体をメモリにツリーとしてロードし、SAX(Simple API for XML)はドキュメントをストリーミング方式で読み取り、イベントハンドラを呼び出します。DOMは小さなドキュメントに便利で、SAXはメモリ制限のある大きなファイルに適しています。

Androidには組み込みパーサーがあります。ストリーム解析用のXmlPullParserとDOMアプローチ用のDocumentBuilderです。iOSはデリゲートプロトコルを持つFoundation XMLParserを使用します。オブジェクトをXMLにシリアライズするには、PHPのSimpleXMLやJavaのJackson XMLなどのライブラリがよく使用されます。

AndroidでのXMLパース(Kotlin)

Androidは効率的なXML解析にXmlPullParserの使用を推奨しています。パーサーはイベント駆動モードで動作します。next()を呼び出して次の要素に移動し、イベントタイプ(START_TAG、TEXT、END_TAG)を返します。これにより、最小限のメモリ消費で任意のサイズのドキュメントを処理できます。

kotlin
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException

fun parseCatalog(parser: XmlPullParser): List<Book> {
    val books = mutableListOf<Book>()
    var eventType = parser.getEventType()
    var currentBook: Book? = null

    while (eventType != XmlPullParser.END_DOCUMENT) {
        when (eventType) {
            XmlPullParser.START_TAG -> {
                when (parser.getName()) {
                    "book" -> currentBook = Book()
                    "title" -> parser.next()
                    "author" -> parser.next()
                }
            }
            XmlPullParser.TEXT -> {
                currentBook?.apply {
                    title = parser.getText() ?: ""
                }
            }
            XmlPullParser.END_TAG -> {
                if (parser.getName() == "book") {
                    currentBook?.let { books.add(it) }
                }
            }
        }
        eventType = parser.next()
    }
    return books
}

アプリケーションでのXMLの例

XMLの使用例は、実際のプロジェクトでのその役割を示しています。Android開発に加えて、XMLはビルド設定、データ記述、ドキュメントワークフローに使用されます。XML構文の理解は、Maven、SOAPサービス、および多くのエンタープライズツールでの作業に必要です。

Maven設定(POM)

pom.xmlファイルはMavenプロジェクトを記述します。依存関係、プラグイン、バージョン、ビルドプロファイルを含みます。各依存関係はgroupId、artifactId、versionタグで指定されます。Mavenはリポジトリから指定されたライブラリを自動的にダウンロードします。

xml
<?xml version="1.0" encoding="UTF-8"?>
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>com.squareup.retrofit2</groupId>
            <artifactId>retrofit</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
</project>

XML vs JSON:どちらを選ぶべきか

XMLとJSONの選択は、プロジェクトの具体的な要件に依存します。JSONは、コンパクトさと速度が重要なREST API、モバイルアプリケーション、設定に適しています。XMLは、厳格な検証、名前空間、データ変換が必要なエンタープライズシステム、ドキュメントワークフロー、Android開発において不可欠です。

XMLは長期的なドキュメント保存のシナリオで優れています。XSDスキーマのおかげで、XMLドキュメントは自動的に検証でき、これは医療、金融、法務システムにとって重要です。XSLT変換により、単一のXMLソースからHTML、PDF、その他の形式を生成でき、ドキュメントワークフローを簡素化します。

一方、JSONはWeb APIとモバイルアプリケーションの標準になりました。JavaScriptとの統合の容易さ、小さなサイズ、高速なパース速度により、JSONはREST API、WebSocketメッセージ、設定ファイルの優先選択肢となっています。ほとんどの新しいプロジェクトでは、JSONから始めて、特定の要件が発生した場合にのみXMLに切り替えることをお勧めします。

よくある質問

XMLとHTMLの違いは何ですか?

XMLはデータの構造と内容を記述し、HTMLは外観と表示を記述します。XMLは任意のタグを作成でき、HTMLは固定のセットを持ちます。XMLは構文がより厳格で、すべてのタグを閉じる必要があり、HTMLは閉じていないタグを許可します。XMLはデータ用、HTMLは表示用です。

XSDとは何ですか?なぜ必要ですか?

XSD(XML Schema Definition)はXMLドキュメントの構造を記述する言語です。XSDは許可される要素と属性、そのデータ型、必須性、制約を定義します。スキーマにより、処理前にXMLドキュメントを自動検証でき、エラーを防ぎデータの整合性を確保します。

AndroidでXMLをパースするには?

Androidでは、XMLパースにXmlPullParserを使用します—組み込みのストリーミングパーサーです。イベント駆動方式で動作し、ループ内でSTART_TAG、TEXT、END_TAGを処理し、メモリを効率的に管理します。小さなドキュメントには、DocumentBuilderFactoryを介したDOMパーサーが適しており、ドキュメント全体をノードツリーとしてメモリにロードします。

DTDとXSDの違いは何ですか?

DTD(Document Type Definition)は機能が制限された古い検証メカニズムで、データ型(すべて文字列)と名前空間をサポートしていません。XSDは、データ型(数値、日付、列挙型)、名前空間、拡張性をサポートする現代的な代替です。XSD自体がXMLドキュメントであるのに対し、DTDは独自の構文を使用します。

XMLで名前空間が必要な理由は?

名前空間は、XMLドキュメントが異なるソースからの要素を結合する際の名前の競合を防ぎます。たとえば、Androidレイアウトでは、Viewタグはandroid.viewとライブラリの両方から来る可能性があります。URIを持つxmlns属性は、各要素と属性のソースを一意に識別します。

まとめ

  • XML — 構造化データのためのカスタムタグを持つ拡張可能なマークアップ言語
  • 厳格な構文 — 必須の終了タグ、ルート要素、大文字小文字の区別
  • 名前空間とXSDスキーマは検証を提供し、名前の競合を防止
  • Androidはインターフェース、リソース、アプリ設定にXMLを使用
  • パースはXmlPullParser(ストリーミング)またはDOM(メモリ内)で実行
  • XSLTによりXMLをHTML、PDF、その他の形式に変換可能
  • REST APIではJSONほど普及していないが、XMLはEnterpriseとAndroidで不可欠

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください