IndesignでXMLを読み込み、自動組版ができるようになったのですが、先方のデータはほぼエクセルで入稿されるので、XMLに変換するのに苦労していました。
対応付けが含まれていないため、XMLデータを保存できません
エクセルから直接XMLに変換しようとしても、「対応付けが含まれてないからアカン」って怒られて保存できないし。
MacのファイルメーカーでXMLに書き出し画面
しかたがないので、エクセルのデータをいったん「csv」形式に書き換え、そのデータを「ファイルメーカー」で開き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」が親なので)してOK。
XMLの対応付けが表示される。
「data」の子要素「aplication」をつかんで、先頭の「Num」のセルにドラッグ。
一発で対応付け完成。
「名前をつけて保存」で、「ファイルの種類」を「XMLデータ」にして保存。
「ちゃんと保存でけへんで」みたいな警告が出るけど、めげずに「継続」クリック。
以上でXMLデータとして保存できました。
データをテキストエディタで開くと、うーん、すっきり。これで後工程のJavascriptでも参照しやすくなった。
まちがった記述があるかもしれませんが、自分用のメモ書きってことでご勘弁してね。




![商用OK・加工OKの無料画像素材集[KOYU写]](http://www.kys-lab.com/common_files/img/banner/kys_photo_banner_120x90.gif)



コメントする