個人的備忘録：XML（データの保存や交換に適したマークアップ言語）について言語化できなかったため、記事としてアウトプットしてみた

## はじめに  
XMLは、データの保存や交換に適したマークアップ言語で、特にRSSフィードや設定ファイルなどで広く使われています。

:::note info
**HTMLと似ていますが、データの意味を定義できる点が異なります。**
:::

本記事では、XMLの基本構造や特徴を解説し、実際にQiitaのRSSフィードを例に解析してみます。

## 書こうと思ったきっかけ  
QiitaのRSSを確認する機会があり、XMLの構造を理解する良い機会だと感じました。

:::note warn
***また、JSONが主流になりつつある中で、XMLが今でも多くの場面で活用されている理由を整理したかったためです。***
:::

**記事の内容は個人的な備忘録程度のものになりますが、温かく見守っていただければ幸いです。**

## XML（Extensible Markup Language）とは？

**XML（Extensible Markup Language）** は、**データを構造化して表現するためのマークアップ言語** です。  

主に、**データの保存・交換・転送** などに使われます。

![Screenshot 2025-02-09 at 17.38.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0dec893e-f5d4-a5ac-3c60-d25fa4804555.png)
引用画像：https://www.skillreactor.io/blog/author/wasay/

**HTMLと似ていますが、XMLはデータの意味を定義するのに対し、HTMLはデータの見た目を定義する** という違いがあります。

## XMLの特徴

- **データの構造化** → 階層的なデータを整理しやすい
- **汎用性が高い** → 異なるシステム間でデータをやり取りできる
- **自己記述型** → データの意味をタグで明示できる
- **拡張性がある** → 任意のタグを定義できる（`<custom-tag>` など）

## XMLと他のデータ形式の比較

| 形式  | 特徴  |
|------|----------------------------------------|
| **XML**  | 人間にも機械にも読みやすい。データの構造化が可能 |
| **JSON**  | 軽量でAPI通信に最適。JavaScriptとの親和性が高い |
| **YAML**  | シンプルで読みやすいが、解析時にインデントの影響を受けやすい |

## 自分のQiita RSSから基本構造を紐解いてみた

XMLは、タグ（要素） を使ってデータを表現します。以下は、QiitaのRSSフィードのXMLを簡略化したものです。

https://qiita.com/free-honda/feed

**自分のQiita RSS（一部、抜粋）**

```xml
<?xml version="1.0" encoding="UTF-8"?>
<feed>
    <title>Qiitaの最新記事</title>
    <updated>2025-02-09T09:58:27+09:00</updated>

    <entry>
        <title>PythonでSHA-256を実装してみた</title>
        <link>https://qiita.com/example/items/sha256</link>
        <author>
            <name>free-honda</name>
        </author>
        <published>2025-02-09T05:59:39+09:00</published>
    </entry>

    <entry>
        <title>効率的なアルゴリズムの基本</title>
        <link>https://qiita.com/example/items/algorithm</link>
        <author>
            <name>free-honda</name>
        </author>
        <published>2025-02-09T08:19:33+09:00</published>
    </entry>
</feed>
```

**解説**

- `<feed>` が全体のデータを囲むルート要素。  
- `<title>` や `<updated>` でフィードの情報を記述。  
- `<entry>` の中に記事のタイトル (`<title>`) やリンク (`<link>`) が入っている。  

### 1. XML宣言部分

```xml
<?xml version="1.0" encoding="UTF-8"?>
```

**解説**

✅ `<?xml version="1.0"?>`  
XMLのバージョンを指定します。ほとんどのXMLドキュメントでは **1.0** が使われます。

✅ `encoding="UTF-8"`  
このXMLドキュメントがUTF-8エンコーディングで記述されていることを示します。  
UTF-8は、多言語対応が可能な一般的な文字エンコーディングで、日本語も扱えます。

### 2. ルート要素（feed）

```xml
<feed>
    <title>Qiitaの最新記事</title>
    <updated>2025-02-09T09:58:27+09:00</updated>
```

**解説**

✅ `<feed>`  
XMLドキュメントの最上位（ルート）要素。  
RSSフィードやAtomフィードのデータを含むタグ。  
この中に、記事 (`<entry>`) やメタ情報 (`<title>`, `<updated>`) が含まれる。  

✅ `<title>Qiitaの最新記事</title>`  
フィードのタイトル（Qiitaの最新記事）。  
RSSリーダーなどで、フィードの名前として表示される。  

✅ `<updated>2025-02-09T09:58:27+09:00</updated>`  
最終更新日時を示す。  
ISO 8601形式（`YYYY-MM-DDTHH:MM:SS+09:00`）で記述され、日本時間（`+09:00`）で表されている。  

### 3. 記事のエントリ（entry）

```xml
<entry>
    <title>PythonでSHA-256を実装してみた</title>
    <link>https://qiita.com/example/items/sha256</link>
    <author>
        <name>free-honda</name>
    </author>
    <published>2025-02-09T05:59:39+09:00</published>
</entry>
```

**解説**

✅ `<entry>`  
1つの記事を表す要素。  
複数の `<entry>` が並ぶことで、複数の記事のリストを表現できる。  

✅ `<title>PythonでSHA-256を実装してみた</title>`  
記事のタイトル。  
RSSリーダーやWebサービスで、記事の一覧に表示される。  

✅ `<link>https://qiita.com/example/items/sha256</link>`  
記事へのリンク（URL）。  
このリンクをクリックすると、Qiitaの該当記事へ移動できる。  

```xml
<author>
    <name>free-honda</name>
</author>
```

**解説**

✅ `<author>`  
記事の著者情報を記述するタグ。  
`<name>` の中に執筆者の名前が入る。  
`free-honda` はQiitaのユーザー名。  

✅ `<published>2025-02-09T05:59:39+09:00</published>`  
記事の公開日時。  
ISO 8601形式で記述され、公開時刻は 2025年2月9日 05:59:39（日本時間）。  

## まとめ  

読んでいただきありがとうございました。今回は基本的な内容でしたが、私自身もあまり触れたことがないデータ形式について学ぶことができました。

***今後も、普段触れる機会の少ない分野にも積極的に挑戦し、アウトプットを通じて知識を身につけていきたいと思います。***