XML Schema(スキーマ)の勉強

October 29, 2009
xml_schema_main.jpg

IndesignでXMLを読み込み、自動組版ができるようになったのですが、先方のデータはほぼエクセルで入稿されるので、XMLに変換するのに苦労していました。

警告画面

対応付けが含まれていないため、XMLデータを保存できません

エクセルから直接XMLに変換しようとしても、「対応付けが含まれてないからアカン」って怒られて保存できないし。

ファイルメーカーで書き出し

MacのファイルメーカーでXMLに書き出し画面

しかたがないので、エクセルのデータをいったん「csv」形式に書き換え、そのデータを「ファイルメーカー」で開きXML形式で書き出していました。工程が多く二度手間、三度手間。

構造がわかりにくいXML

見た目でも構造がわかりにくいXML

それも、エクセル(Windows Vista)とファイルメーカー(Mac OS9)で連携させているので、文字化けも発生するし、書き出されたXMLの構造もわかりにくい。

腹決めて、対応付けさせる「XML Schema(スキーマ)」を勉強することにしました。

以下は、自分用のメモ。

XML Schemaとは

XML Schemaとは、XML文書の構造を定義するスキーマ言語の一つ。XML関連技術の標準を策定しているW3Cが標準化にあたっている。

XMLは構造化文書を記述するマークアップ言語を作成するための「メタ言語」であり、XML自身は個々のタグの意味や関連性などを定義していない。

実際にXMLを用いて文書を作成するためには、文書中でどのようなタグや属性が使われているかなど、具体的な構造を定義しなければならない。これを行なうのが「スキーマ言語」と呼ばれる言語である。
......(以下省略)

XML Schemaとは - 意味/解説/説明/定義 : IT用語辞典

読んでも意味がよくわかりません。。。

要するにXMLを誰がみてもわかりやすく定義するってことだ。多分。

XML スキーマの作成

説明をながめていても意味がわからず頭が痛くなってきたので、取りあえず見よう見まねで作ってみることにしました。

サンプルは「data」という親ルートの配下に、各要素を持った「aplication」という子要素があるというもの。

とにかく、宣言や定義が多いです。プログラム的にいえばオブジェクト指向ってことでしょうか。他の言語もほとんど知りませんが、ActionScriptもいつのまにかそうなってきてますよね。

スキーマは「.xsd」という拡張子で保存します。

【サンプルスキーマ】

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="data" type="data_type">
  <xsd:key name="application-id">
      <xsd:selector xpath="application" />
      <xsd:field xpath="@id" />
  </xsd:key>
</xsd:element>
  
<xsd:complexType name="data_type">
  <xsd:sequence>
      <xsd:element ref="application" minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>

<xsd:element name="application" type="applicationType" />
  
<xsd:complexType name="applicationType">
  <xsd:sequence>
      <xsd:element name="title" type="xsd:string" />
      <xsd:element name="img" type="xsd:string" />
      <xsd:element name="price" type="xsd:positiveInteger" />
      <xsd:element name="outline" type="xsd:string" />
  </xsd:sequence>
  <xsd:attribute name="id" type="xsd:positiveInteger" use="required" />
</xsd:complexType>
  
</xsd:schema>

【解説(というか自分用のメモ)】

■XML宣言
<?xml version="1.0" encoding="Shift_JIS" ?>

XMLのヴァージョンと文字コードの指定。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

ルート要素。XML Schemaのルート要素を「schema」に指定する記述。
1、2行目の記述は必須で、要するにおまじないみたいなもの。違うか。

■要素を宣言
<xsd:element name="data" type="data_type">

「name」に宣言する要素名、「type」に要素の構造であるデータ型を記述。

■id属性を宣言
<xsd:key name="application-id">

application-idという名前の、一意性を保証するための設定をするという意味。

<xsd:selector xpath="application" />

「selector」は、applicationの要素で、一意な値(ID)を持つ要素を指定する部分。

<xsd:field xpath="@id" />

「field」は、どの要素や属性が一意な値(ID)になるか指定する部分。

■要素型を定義
<xsd:complexType name="data_type">

要素配下に子要素や属性を含む場合には、複合型の<xsd:complexType>要素を記述。
ちなみに、配下にテキストしかもたない単純型の場合は<xsd:simpleType>となる。

<xsd:sequence>

グループ内の要素がコンテナ要素内で指定した順番で使用される。

<xsd:element ref="application" minOccurs="0" maxOccurs="unbounded" />

「ref」は、applicationという要素名をもつ要素を参照。
「minOccurs="0" maxOccurs="unbounded"」は0回~無制限の指定。

■要素を宣言
<xsd:element name="application" type="applicationType" />

「name」に宣言する要素の名前、「type」に要素の構造を記述。

■要素型を定義
<xsd:complexType name="applicationType">

複合型の要素を定義。

■要素を宣言
<xsd:element name="title" type="xsd:string" />
<xsd:element name="img" type="xsd:string" />
<xsd:element name="price" type="xsd:positiveInteger" />
<xsd:element name="outline" type="xsd:string" />

<xsd:element name="要素名" type="データ型"/>
「xsd:string」は文字列、「xsd:positiveInteger」は正の整数。

■属性ノードを定義
<xsd:attribute name="id" type="xsd:positiveInteger" use="required" />
<xsd:attribute>要素で属性ノードを定義する。

「use」属性、属性の特性を表すための情報。

  • required...必須(無指定の場合はエラー)
  • optional...任意
  • default...デフォルト値指定(value属性は必須)
  • fixed...固定値指定(value属性は必須)

エクセルで対応付け

エクセルで上記のスキーマを対応付けします。

対応付けクリック

【開発>ソース】から「XMLの対応付け」をクリック。

追加クリック

「追加」クリックしてスキーマを選択後、OK。

data選択

ルートを「data」選択(今回は「data」が親なので)してOK。

対応付けが表示

XMLの対応付けが表示される。

ドラッグ

「data」の子要素「aplication」をつかんで、先頭の「Num」のセルにドラッグ。

対応付け完成

一発で対応付け完成。

XMLで保存

「名前をつけて保存」で、「ファイルの種類」を「XMLデータ」にして保存。

警告画面が出てもめげずに継続クリック

「ちゃんと保存でけへんで」みたいな警告が出るけど、めげずに「継続」クリック。

以上でXMLデータとして保存できました。

完成したXML

データをテキストエディタで開くと、うーん、すっきり。これで後工程のJavascriptでも参照しやすくなった。

まちがった記述があるかもしれませんが、自分用のメモ書きってことでご勘弁してね。

参考サイト

たのしいXML: XML/XHTML入門ページです

@IT:XMLテクニック集 - インデックス

トラックバック(0)

コメントする


画像の中に見える文字を入力してください。

PageTop