XML【エックスエムエル】形式ファイルの操作方法
Excelを使用してXMLデータを入出力する場合は、XMLデータの文書構造やデータ型などを定義した「XMLスキーマ」をブックに追加し、セルの列にXMLデータの要素を対応付けることによってXML形式でデータを入出力することができるようになります。
XML【エックスエムエル】とは
Extensible Markup Language【エクセテンサブル マークアップ ランゲージ】の略でExtensible【エクセテンサブル】は伸張性があるという意味がありMarkup【マークアップ】はダグを使用した文書構造の意味付けLangeuage【ランゲージ】は言語という意味があります。
データにダグと呼ばれる情報を不可することでデータの意味を記述し、データを入れ子構造で構成してデータの階層構造を表します。
データの階層構造は、主に「XMLスキーマ」を使用して設計し、その階層構造に従ってXMLデータを作成します。
XMLで記述されたファイルはテキスト形式なので汎用性が高く、OSやアプリケーションが違う環境でもデータの交換が可能になります。
汎用性が高いテキストとしてはCSVもありますが、問題点として個々のデータに意味付けがされていない、使用されている文字コードによっては環境によって文字化けしてしまう問題がありますがXMLはこれらの問題を解決したファイル形式になります。
XMLデータの書き方
XMLは、「要素」と呼ばれる単位で構成され「タグ」と呼ばれる文字列によってデータの意味を記述し、各要素を入れ子構造で記述することによってデータの階層構造を記述します。
XML宣言
XMLデータであることを表す記述でXMLデータの先頭に記述します。
XML宣言の書式と設定値の説明
<?xlm version=”1.0″ encoding=”文字コード” standalone=”設定値”?>
- <?xlm versin=”1.0″?>(必須)
XML文書であることとバージョン情報を記述します。 - 文字コード(省略可)
encoding【エンコーディング】属性は文字コードをOSやアプリケーションなどの環境に合わせて設定します。省略した場合は、 Unicode エンコーディングが使用された場合、XML パーサーは自動的に識別することができますが、他のエンコーディングをサポートするドキュメントはこの宣言を使用する必要があります。 - 設定値(省略可)
Standalone【スタンドアローン】とは単独で機能するという意味があり外部ドキュメント型定義 (XMLスキーマ) などの外部情報に依存しているかどうかを示します。Standalone【スタンドアローン】属性は以下の設定値を使用します。設定値 内容 yes 外部情報に依存していません。 no 外部情報に依存します。(既定値) 省略した場合は、外部リソースがある場合は外部リソースを受け入れます。
要素の書き方
各要素は要素名のタグでデータをはさんでデータの内容を表します。
要素の書式と設定値の説明
<要素名>データ</要素名>
- 要素名
HTMLでは要素名には決まったルールがありますが、XML文書では要素名は自由に設定することができます。要素名に半角英字を使用する場合は、大文字小文字は区別されるので注意して下さい。漢字やひらがなも使用することが可能です。
属性の書き方
各要素には、その補足情報を「属性」として記述できます。
属性の書式と設定値の説明
<要素名 属性名1=”属性値1″ 属性名2=”属性値2″・・>データ</要素名>
- 属性名=”属性値”
属性名、属性値も要素と同じく、自由に設定することが可能です。半角英字は大文字と小文字は区別されるので注意してください。もちろん漢字・ひらがなも使用することができます。複数の属性を記述する場合は、空白文字列で区切ります。
子要素を持つ要素の書き方
要素内に入れ子構造で記述する要素を「子要素」と呼びます。
子要素を持つ要素の書式
<要素名>
<子要素名>データ</子要素名>
</要素名>
データや子要素を持たない要素の書き方
データや子要素を持たない要素の書式
<要素名/>
データや子要素を持たない要素の属性の書式
<要素名 属性名1=”属性値1″・・/>
XMLスキーマとは
XMLスキーマは、XMLデータの階層構造や出現する要素とそのデータ型などを定義するXML形式のファイルです。
XMLスキーマの拡張子は「xsd」です。XMLスキーマを読めば、作成するXMLデータの要素と
その階層構造を確認できます。また、XMLデータがXMLスキーマで定義された要素や階層構造で作成されているかといったチェックを行うときもXMLスキーマが参照されます。
コードはテキストエディタ(メモ帳)などに記述して文字コードは「UTF-8」で拡張子を「xsd」に設定して保存します。
XMLスキーマコード(A事業.xsd)と解説
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="A事業"> <xsd:complexType> <xsd:sequence> <xsd:element name="商品" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="商品名" type="xsd:string"/> <xsd:element name="価格" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
XMLスキーマもXML形式のデータなので、1行目にXML宣言を記述します。
2行目【<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>】
XLMスキーマのルート要素であるschema【スキーマ】要素を記述します。ここでは、「xsd」がXMLスキーマの「名前空間接頭辞」であることを宣言します。
「名前空間接頭辞」とは、タグの要素名の前に記述する文字列で、どこで定義されたダグなのかを識別することができます。
例えば、<xsd:タグ名>の形で記述することで、このタグがXMLスキーマのタグであることを表します。
3行目【<xsd:element name=”A事業”>】
XMLで出現する要素はelement【エレメント】要素で記述します。要素名はname【ネーム】属性で定義します。子要素を持つルート要素の「A事業」を定義します。
4行目【<xsd:complexType>】
要素配下に要素(もしくは属性)を含む場合には、<xsd:element >要素配下に<xsd:complexType >要素を記述します。
complexType【コンプレックスタイプ】要素は子要素や属性の情報また、その登場順や回数を定義します。子要素がありますという宣言のようなものです。
5行目【<xsd:sequence>】
sequence【シーケンス】とは配列や順番という意味がありsequence【シーケンス】要素は、その配下の要素が順番に出現することを意味します。
6行目~8行目【<xsd:element name=”商品” minOccurs=”1″ maxOccurs=”unbounded”>
<xsd:complexType>
<xsd:sequence>】
子要素はcomplexType【コンプレックスタイプ】要素でまとめてルートのelement【エレメント】要素の子要素として記述します。
子要素の出現順番を定義する場合はsequence【シーケンス】要素でまとめてcomplexType【コンプレックスタイプ】要素の子要素をして出現する順番に記述します。
<xsd:element> <xsd:complexType> <xsd:sequence> 子要素を出現する順番に記述 </xsd:sequence> </xsd:complexType> </xsd:element>
何度も出現する要素には、minOccurs【ミニオーカーズ】属性に最低出現回数、maxOccurs【マックスオーカーズ】属性に最高出現回数を設定します。なお、無制限で出現させるときは、maxOccurs【マックスオーカーズ】属性にunbounded【アンバンデッド】を設定します。
Occurs【オーカーズ】は発生という意味があり、unbounded【アンバンデッド】は無制限とい意味があります。
9行目【<xsd:element name=”商品名” type=”xsd:string”/>】
階層構造の最下部データ部分の定義です。element【エレメント】要素のname【ネーム】属性に「商品名」type【タイプ】属性にデータ型を設定します。ここでは、文字列型(string)になります。
10行目【<xsd:element name=”価格” type=”xsd:int”/>】
階層構造の最下部データ部分の定義です。element【エレメント】要素のname【ネーム】属性に「価格」type【タイプ】属性にデータ型を設定します。ここでは、整数型(int)になります。
以上で、XMLスキーマを作成する方法についての解説を終了します。ありがとうございました。