XML(eXtensible Markup Language)は、カスタムタグを使用して構造化データを保存および転送するためのテキスト形式です。設定ファイル、Webサービス、Android開発で広く使用されています。W3Cコンソーシアムによると、XML仕様は2008年から安定した標準であり続けています。XMLは、スキーマによる検証機能を備えた厳格なデータ構造を提供します。
重要なポイント
XMLは、人間と機械の両方が読み取り可能な形式でドキュメントをエンコードするためのルールセットを定義するマークアップ言語です。HTMLとは異なり、XMLには固定のタグセットはありません—開発者はデータ構造に対応する独自のタグを作成します。
XMLは1996年にW3CコンソーシアムによってSGML(Standard Generalized Markup Language)の簡略化されたサブセットとして開発されました。XMLの主な目的は、コンテンツをデータのプレゼンテーションから分離することです。外観を記述するHTMLとは異なり、XMLはデータの構造と意味を記述します。
XMLの重要な特性は拡張性です。プロジェクトに新しいデータ型が登場した場合、開発者は既存の構造を変更せずに新しいタグを追加するだけです。これにより、XMLは長期的なデータ保存と異なるシステム間の交換に便利です。
XMLの構文はHTMLよりも厳格です。各開始タグには対応する終了タグが必要で、属性は引用符で囲み、タグ名は大文字と小文字を区別します。ドキュメントには、他のすべてを含むルート要素が1つだけ必要です。
XMLドキュメントは、XMLバージョンとエンコーディングを指定する宣言で始めることができます。その後、ルート要素が続き、その中にネストされた要素、属性、テキストコンテンツ、コメントを含めることができます。空の要素は<element />として記述されます。
<?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>
整形式(Well-formed)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はAndroid開発で重要な役割を果たします。Androidオペレーティングシステムは、ユーザーインターフェース(レイアウトファイル)、アプリケーション設定(AndroidManifest.xml)、リソース(strings、colors、themes)、ベクターグラフィック(VectorDrawable)を記述するためにXMLを使用します。iOSでは、XMLは主にStoryboardと設定plistファイルに使用され、頻度は低くなります。
Androidでは、各アプリケーション画面はViewコンポーネント(ConstraintLayout、LinearLayout、TextView、Button)の階層を持つXMLファイルで記述されます。このアプローチは、アプリケーションのロジックをプレゼンテーションから分離し、メンテナンスと異なる画面への適応を簡素化します。リソースXMLファイルにより、コードを変更せずにアプリケーションをローカライズできます。
典型的なレイアウトファイルには、ネストされた要素を持つルートConstraintLayoutが含まれ、各要素には位置、サイズ、スタイルの属性があります。Androidは起動時のパフォーマンス最適化のためにXMLをAXMLバイナリ形式にコンパイルします。
<?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パースはモバイルプラットフォームで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解析にXmlPullParserの使用を推奨しています。パーサーはイベント駆動モードで動作します。next()を呼び出して次の要素に移動し、イベントタイプ(START_TAG、TEXT、END_TAG)を返します。これにより、最小限のメモリ消費で任意のサイズのドキュメントを処理できます。
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の使用例は、実際のプロジェクトでのその役割を示しています。Android開発に加えて、XMLはビルド設定、データ記述、ドキュメントワークフローに使用されます。XML構文の理解は、Maven、SOAPサービス、および多くのエンタープライズツールでの作業に必要です。
pom.xmlファイルはMavenプロジェクトを記述します。依存関係、プラグイン、バージョン、ビルドプロファイルを含みます。各依存関係はgroupId、artifactId、versionタグで指定されます。Mavenはリポジトリから指定されたライブラリを自動的にダウンロードします。
<?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と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は表示用です。
XSD(XML Schema Definition)はXMLドキュメントの構造を記述する言語です。XSDは許可される要素と属性、そのデータ型、必須性、制約を定義します。スキーマにより、処理前にXMLドキュメントを自動検証でき、エラーを防ぎデータの整合性を確保します。
Androidでは、XMLパースにXmlPullParserを使用します—組み込みのストリーミングパーサーです。イベント駆動方式で動作し、ループ内でSTART_TAG、TEXT、END_TAGを処理し、メモリを効率的に管理します。小さなドキュメントには、DocumentBuilderFactoryを介したDOMパーサーが適しており、ドキュメント全体をノードツリーとしてメモリにロードします。
DTD(Document Type Definition)は機能が制限された古い検証メカニズムで、データ型(すべて文字列)と名前空間をサポートしていません。XSDは、データ型(数値、日付、列挙型)、名前空間、拡張性をサポートする現代的な代替です。XSD自体がXMLドキュメントであるのに対し、DTDは独自の構文を使用します。
名前空間は、XMLドキュメントが異なるソースからの要素を結合する際の名前の競合を防ぎます。たとえば、Androidレイアウトでは、Viewタグはandroid.viewとライブラリの両方から来る可能性があります。URIを持つxmlns属性は、各要素と属性のソースを一意に識別します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。