XMLマスターへの道
〜「XMLマスター:ベーシック」試験対策〜

第14回 XML Schemaを利用したスキーマ定義

内藤一彦
NRIラーニングネットワーク株式会社
2004/3/4

 今回から2回にわたり、XML Schemaを利用したXML文書構造の定義について紹介していきます。XML Schemaの仕様自体は非常に複雑でボリュームがあり、同じ構造を定義するにもさまざまな表現方法がとれます。今回は、XML Schemaの概要や基本的構造を解説します。

 前回、予習問題として下記の問題を出題しておきました。この問題を解くための解説をした後、解答を示します。

今回の問題

(Q1) XML Schemaの特徴として正しい説明はどれでしょう。正しいものをすべて選んでください。

 (a)XML 1.0対応のXMLパーサであれば使用可能である
 (b)
XML形式の文書として記述する
 (c)
XML文書から参照する場合、DTDと同様にDOCTYPE宣言を記述する
 (d)
名前空間を使用することができる
 

(Q2) XMLインスタンスで、文字列の値を持つElem要素が0回以上繰り返し出現するとき、このElem要素を定義するXML Schemaを使用する記述として正しいのは次のどれでしょう。

(a)
<xsd:element name="Elem"* type="xsd:string" />

(b)
<xsd:element name="Elem" type="xsd:string"
       Occurs="*" />

(c)
<xsd:element name="Elem" type="xsd:string"
        minOccurs="0" maxOccurs="*"/>

(d)
<xsd:element name="Elem" type="xsd:string"
       minOccurs="0" maxOccurs="unbounded"/>

 今回は、この問題に解答するうえで必要となる下記の内容について解説します。

  • XML Schemaの概要
    • 仕様概要
    • 特徴とDTDとの比較
    • データ型体系
  • XML Schemaの構造
    • ルート要素
    • XMLデータ構造の理解
    • 複合型の宣言
    • 要素の宣言
    • 属性の宣言
  • XML 文書とXML Schema文書の関連付け


XML Schemaの概要

仕様概要

 「スキーマ」とは一般的に枠組みや構造を指し示すときに用いるキーワードです。XMLの世界で「スキーマ」といえば、XML文書の構造を指します。XML Schemaは2001年にW3Cで勧告されました。DTDの欠点とされていた部分が改善され、今後のスキーマ定義語の標準として採用が進んでいます。

 XML Schemaの仕様は次の3つのパートから構成されています。

仕様書名 内容
Part0:Primer(入門書) XML Schemaの全体像を解説しているドキュメント
Part1:Structures(構造) XML Schemaを使用した定義方法(記述方法)に関する仕様書
Part2:Datatypes(データ型) XML Schemaで使用するデータ型に関する仕様書
表1 XML Schema仕様の3つのパート

 XML Schemaでは、構造とデータ型が分離されたことにより、ほかの機能から利用されることが可能となりました。例えばSOAPでは、扱うデータ型としてXML SchemaのPart2:Datatypesを利用できます。

特徴とDTDとの比較

 そもそもXMLのスキーマ定義言語としてはDTDが標準でしたが、XMLが基幹業務システムで利用されるなど利用範囲が広まると、次第に欠点が指摘され始めました。XML SchemaではDTDの欠点に対して改善が施されているほかに、出現繰り返し回数の整数値での具体的指定や、要素や属性の値に対して最小値や最大値、文字数などの制限設定など、DTDにはなかったより細かい設定ができるようになりました。

DTDの欠点 XML Schemaでの改善
XML形式ではない XML形式で定義
名前空間に対応していない 名前空間に対応
データ型の概念を持たない 44の組み込みデータ型が用意されている
XML文書の中の要素や属性をすべて1つのDTDに定義しなければならない 複数のスキーマ定義を組み合わせて、1つのXML文書の要素や属性を定義することも可能
表2 XML Schemaで改善されたDTDの欠点

 次に、同じXMLデータの構造を定義しているDTDとXML Schemaの記述例を挙げます。

<!ELEMENT  EMPLOYEES ( EMPLOYEE* )>
<!ELEMENT  EMPLOYEE ( Name , Dept )>
<!ELEMENT  Name ( #PCDATA )>
<!ELEMENT  Dept ( #PCDATA )>
<!ATTLIST  EMPLOYEE empid ID #REQUIRED >
リスト1 DTDでの定義

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

<xs:element name="EMPLOYEES" type="EMPLOYEES_type" />
<xs:element name="EMPLOYEE" type="EMPLOYEE_type" />
<xs:element name="Name" type="xs:string" />
<xs:element name="Dept" type="xs:string" />
<xs:attribute name="empid" type="xs:ID" />

<xs:complexType name="EMPLOYEES_type">
   <xs:sequence >
     <xs:element ref="EMPLOYEE" minOccurs="0"
                                maxOccurs="unbounded" />
   </xs:sequence>
</xs:complexType>

<xs:complexType name="EMPLOYEE_type">
   <xs:sequence >
      <xs:element ref="Name" />
      <xs:element ref="Dept" />
   </xs:sequence>
   <xs:attribute ref="empid" use="required" />
</xs:complexType>
</xs:schema>
リスト2 XML Schemaでの定義(emp.xsd


データ型体系

 XML Schemaで扱うデータ型の体系は次のようになります。

 図1 XML Schemaのデータ体系


【組み込みデータ型】

 プログラム言語やDBMSなどで使用される一般的なデータ型やDTDで利用されていたID型やNMTOKEN型なども含め44のデータ型が用意されています。

代表的なデータ型

 xsd:string、xsd:int、xsd:decimal、xsd:float、xsd:double、xsd:boolean、
 xsd:dateTime、xsd:date、xsd:time、xsd:ID、xsd:IDREF、xsd:NMTOKEN

 組み込みデータ型の一覧については、@ITの記事「XMLテクニック集」−「XML Schemaで単純型要素を定義する」の「XML Schemaデフォルトのデータ型」を参照されるとよいでしょう。

【(ユーザー定義)単純型】

 ユーザーが独自に定義する型です。この型は、組み込みデータ型に制限を設定して、新しい型として利用する場合に使います(次回解説します)。

 xsd:intに最小値や最大値を設定
 xsd:stringに最小文字数や最大文字数を設定

【複合型】

 ユーザーが独自に定義する型ですが、これはデータ型というよりは要素構造を定義するための型です。次の要素は、ユーザー定義複合型でその型を定義する必要があります。

  1. 子要素を持つ要素(属性も持つことができる)
  2. 属性を持つ要素

XML Schemaの構造

ルート要素

 XML Schema文書はXML形式で作成します。ルート要素には、schema要素を使用します。XML Schemaの名前空間を宣言しましょう。一般的には、「xs」や「xsd」という修飾子を使うことが多いです。

【形式】

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

複合型、要素、属性の宣言

</xs:schema>

 このschema要素の子要素として、複合型要素属性の宣言のための要素を記述していきます。

XMLデータ構造の理解

 次のデータ構造を持つXML文書に対応するスキーマを作成していきますが、最初にデータ構造をよく理解しておくことが大切です。

 図2 XML文書(リスト3)のデータ構造

 この構造を使用しているXMLは次のとおりです。

<?xml version="1.0" encoding="Shift_JIS" ?>
<EMPLOYEES>
  <EMPLOYEE  empid="A001">
    <Name>Kazuhiko Naito</Name>
    <Dept>IT Education Services Dept.</Dept>
  </EMPLOYEE>
  <EMPLOYEE  empid="B002">
    <Name>Masahiko Kondo</Name>
    <Dept>Education Sales Dept.</Dept>
  </EMPLOYEE>
</EMPLOYEES>
リスト3 XML文書(図2のデータ構造を持つ)

 それでは、要素の階層構造に着目してみましょう。

 図3 XML文書(リスト3)の階層構造

 このデータは、2つの階層を持っています。

  1. EMPLOYEES − EMPLOYEE(青い破線)
  2. EMPLOYEE − Name、Dept(赤い破線)

 XML Schemaでは、要素の階層は複合型として、その構造を定義する必要がありますので、この例では2つの複合型が必要となります。

 続いて、属性に注目してみましょう。

 図4 XML文書(リスト3)の属性

 EMPLOYEEはempid属性を持ちますので、これも複合型が必要となります。しかし、複合型では子要素を持つ要素には属性も持たせることができるので、前述の「2. EMPLOYEE − Name、Dept」と共通化されます。

 従って、このデータで必要な複合型は、次のようになります。

 図5 XML文書(リスト3)に必要な複合型

  (イ)EMPLOYEES −EMPLOYEE(青い破線)
  (ロ)EMPLOYEE − Name、Dept、empid属性(赤い破線)


複合型の宣言

 複合型はcomplexTypeを使用して宣言します。前述の(イ)EMPLOYEES要素用の複合型の宣言は次のようになります。

 図6 EMPLOYEES要素用の複合型

【複合型の名前】

 name属性でこの複合型に名前を付けます。この名前は、EMPLOYEES要素の宣言で使用されます。

【モデルグループ】

 モデルグループとは、子要素の出現パターンを定義するものです。次の3つのパターンが用意されています。

モデルグループ 意味 DTDでの同機能
sequence 子要素が指定された順番に出現 ( A , B , C )
choice 子要素はいずれか1つのみ出現 ( A | B| C )
all 順不同で0回または1回のみ出現 なし
表3 モデルグループの子要素出現パターン

 このモデルグループに対して繰り返しを指定することもできます。

<xs:sequence  minOccurs="1" maxOccurs="unbounded" >

    <xs:element ref="A" />
    <xs:element ref="B" />

</xs:sequence>

 minOccurs:最小繰り返し回数(省略時:1回)
 maxOccurs:最大繰り返し回数(省略時:1回、無制限:unbounded

 これにふさわしい子要素の出現パターンは、(A , B)がセットになって繰り返し

A , B , A , B , A , B ……

となります。

 例では、sequenceを使用していますが、choiceでも同様に使用できます。allを使用するのであれば、0回か1回になるように記述しなければなりません。従って、2回以上やunboundedの指定はできません。

【子要素の参照】

 要素を宣言するには、elementを使用します。

<xs:element ref="EMPLOYEE" ……

 ref属性は、ほかの場所で宣言されている要素定義を参照する場合に使用します。従って、後にEMPLOYEE要素を定義する必要があります(後述:「要素の宣言」)。また、この要素に対してモデルグループと同様に、繰り返しの指定が可能です。

 続いて、前述の(ロ)EMPLOYEE要素用の複合型の宣言を見てみましょう。

 図7 EMPLOYEE要素用の複合型

 EMPLOYEE要素も子要素を持ちますので、EMPLOYEES要素と同様にモデルグループを用いて子要素の出現パターンを定義します。

 さらに、属性も持ちますので、属性の宣言を記述します。

注意

 attributeの記述位置に注意が必要です。モデルグループの後に記述してください。

【属性の参照】

 属性を宣言するには、attributeを使用します。

<xs:attribute ref="empid" ……

 ref属性は、ほかの場所で宣言されている属性定義を参照する場合に使用します。従って、後にempid属性を定義する必要があります(後述:「属性の宣言」)。

【use属性】

 出現に関する指定として、次のいずれかを記述できます。

指定する値 意味 DTDにおける属性リスト宣言との対応
optional 省略可能 #IMPLIED
required 必須。省略不可 #REQUIRED
prohibited 出現禁止 対応なし
表4 use属性に記述できる出現の指定

要素の宣言

 要素は、elementを使用して宣言します。

【形式】

<xs:element  name="要素名"
    type="型の名前"
    default="デフォルト値"
    fixed="固定値">

【type属性】

 この要素の型を指定します。型としては、組み込みデータ型やユーザー定義の単純型や複合型の名前を指定します。

【default属性】

 デフォルト値を指定することができます。デフォルト値が採用されるのは、空要素となっている場合です。

【fixed属性】

 固定値を指定できます。これは、DTDにおける属性リスト宣言の#FIXEDと同様の機能です。「第5回 valid XMLとDTDの関係 属性リスト宣言 表3 属性リスト宣言で指定できるデフォルト値」を参照するとよいでしょう。

 では、今回のXMLデータに必要な要素宣言を考えていきましょう。

 図8 XML文書(リスト3)に必要な要素宣言

<xs:element name="EMPLOYEES" type="EMPLOYEES_type" />
<xs:element name="EMPLOYEE" type="EMPLOYEE_type" />
<xs:element name="Name" type="xs:string" />
<xs:element name="Dept" type="xs:string" />

 今回は、この要素宣言をcomplexTypeのモデルグループ内elementのref属性から参照していますが、次のようにref属性を使用しない方法もあります。

<xs:complexType name="EMPLOYEES_type">
  <xs:sequence >
    <xs:element name="EMPLOYEE"  type="xs:string"
                minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>


属性の宣言

 要素は、attributeを使用して宣言します。

【形式】

<xs:element  name="要素名"
    type="型の名前"
    default="デフォルト値"
    fixed="固定値"
    use="出現に関する指定">

【type属性】

 この属性の型を指定します。型としては、組み込みデータ型かユーザー定義の単純型の名前を指定します。

【default属性】

 デフォルト値を指定することができます。属性が記述されていない場合に採用されます。

【fixed属性】

 固定値を指定することができます。これは、DTDにおける属性リスト宣言の#FIXEDと同様の機能です。「第5回 valid XMLとDTDの関係 属性リスト宣言 表3 属性リスト宣言で指定できるデフォルト値」を参照するとよいでしょう。

 それでは、empid属性のデータ型を「xs:ID」、省略不可とした場合の記述を見てみましょう。

<xs:attribute name="empid" type="xs:ID" />

 今回は、この属性宣言をcomplexType内attribute のref属性から参照していますが、次のようにref属性を使用しない方法もあります。

<xs:complexType name="EMPLOYEES_type">
  <xs:sequence >
       <xs:element ref="Name" />
       <xs:element ref="Dept" />
  </xs:sequence>
<xs:attribute name="empid"  type="xs:ID" use="required" />
</xs:complexType>

 これで、必要な宣言がすべて出そろいました。全体を見ておきましょう。

リスト4 完成したXML Schema(emp.xsd

 今回は、複合型に名前を付けて要素宣言のtype属性で参照しましたが、次のようにcomplexTypeをelementの子要素として記述し、名前を付けずに宣言する方法もあります。

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

<xs:element name="EMPLOYEES" >
  <xs:complexType >
    <xs:sequence >
       <xs:element ref="EMPLOYEE" minOccurs="0"
           maxOccurs="unbounded"/>
     </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="EMPLOYEE">
  <xs:complexType >
    <xs:sequence >
         <xs:element ref="Name" />
         <xs:element ref="Dept" />
    </xs:sequence>
    <xs:attribute ref="empid"  use="required" />
</xs:complexType>
</xs:element>

<xs:element name="Name" type="xs:string" />
<xs:element name="Dept" type="xs:string" />
<xs:attribute name="empid" type="xs:ID" />

</xs:schema>
リスト5 完成したXML Schema(type属性の参照を使わない方法)(emp2.xsd

XML文書とXML Schema文書の関連付け

 XML文書とDTDの関連付けにはDOCTYPE宣言を使用しましたが、XML Schema文書の関連付けには使えません。次のような方法で関連付けする方法があります。しかし、これは仕様で決められた方法ではないため、実際には使用するXMLパーサの実装方法に従います。

 XML Schemaを使用したいXML文書で、次のような記述を行う方法があります。

<?xml version="1.0" encoding="Shift_JIS" ?>
<EMPLOYEES xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="emp.xsd">
  <EMPLOYEE  empid="A001">
    <Name>Kazuhiko Naito</Name>
    <Dept >IT Education Services Dept.</Dept>
  </EMPLOYEE>
  <EMPLOYEE  empid="B002">
    <Name>Masahiko Kondo</Name>
    <Dept >Education Sales Dept.</Dept>
  </EMPLOYEE>
</EMPLOYEES>
リスト6 XML文書とXML Schemaの関連付け(employee.xml)、青帯の部分でXML Schema文書のファイルを指定している

 前回、名前空間の確認用に使用したスキーマ検証ツールを使用すれば、XML文書がXML Schema文書で定義した構造に合致しているか確認できます。

 図9 「XML検証ツール」による検証結果

 このほかにも、XML Schema文書を名前空間で関連付けする方法もあります。その方法については、次回でじっくり解説いたします。


今回の問題の解答

 それでは、予習問題の解答です。

(Q1) XML Schemaの特徴として正しい説明はどれでしょう。正しいものをすべて選んでください。

 (a)XML 1.0対応のXMLパーサであれば使用可能である
 (b)
XML形式の文書として記述する
 (c)
XML文書から参照する場合、DTDと同様にDOCTYPE宣言を記述する
 (d)
名前空間を使用することができる

 答えは、(b)、(d)です。「XML Schemaの概要(特徴とDTDとの比較、データ型体系 組み込みデータ型)」参照。

 (a)XML Schemaを利用するためには、XMLパーサ自体がXML Schemaをサポートしている必要があります。

 (c)DOCTYPE宣言はDTDの参照に使います。XML Schema文書の参照方法は仕様では決められていませんが、本文中の「XML文書とXML Schema文書の関連付け」で説明されている方法や、名前空間に関連付けさせる方法などがあります。

(Q2) XMLインスタンスで、文字列の値を持つElem要素が0回以上繰り返し出現するとき、このElem要素を定義するXML Schemaを使用する記述として正しいのは次のどれでしょう。

(a)
<xsd:element name="Elem"* type="xsd:string" />

(b)
<xsd:element name="Elem" type="xsd:string"
       Occurs="*" />

(c)
<xsd:element name="Elem" type="xsd:string"
        minOccurs="0" maxOccurs="*"/>

(d)
<xsd:element name="Elem" type="xsd:string"
       minOccurs="0" maxOccurs="unbounded"/>

 答えは、(d)です。

 繰り返しの指定には、minOccurs属性、maxOccurs属性を使用します。maxOccurs属性において、〜以上というように無制限を指定する場合、「unbounded」キーワードを指定します。minOccurs属性、maxOccurs属性ともに省略した場合には1回がとられます。従って、本問題の場合

minOccurs="0" maxOccur="unbounded"

という指定が必要となります。この問題に関して参考になる解説は、「XML Schemaの構造複合型の宣言要素の宣言)」です。


次回の予習問題

 次回のための予習問題を掲載します。

 次回も引き続きXML Schemaについて解説します。データ型に最小値や最大値など制限を設けるユーザー定義単純型の記述方法や、XML文書からXML Schema文書を名前空間に関連付けて参照する方法について解説します。

予習問題

(Q1) 次のユーザー定義単純型で宣言されている構造に合致する、XML文書中のid要素の記述として正しいのはどれでしょう。

<xs:simpleType name="restid">
  <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]{2}-\d{3}" />
  </xs:restriction>
</xs:simpleType>

<xs:element name="id" type="restid" />

 (a) <id>AB</id>
 (b) <id>1234</id>
 (c) <id>AX456</id>
 (d) <id>AX-456</id>

(Q2) 次のように、スキーマ定義として名前空間に関連付けしたXML Schema文書を参照しているXML文書があります。このXML文書が妥当となるXML Schema文書をすべて選択してください。

<emp:EMPLIST
 xmlns:emp="http://www.abc.com/EMP-Schema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.abc.com/EMP-Schema empschema.xsd">
  <emp:EMPLOYEE emp:id="A001">
    <emp:NAME>Taro Yamada</emp:NAME>
  </emp:EMPLOYEE>
</emp:EMPLIST>

(a)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="EMPLIST" type="EMPLIST_type" />
<xs:element name="EMPLOYEE" type="EMPLOYEE_type" />
<xs:element name="NAME" type="xs:string" />
<xs:attribute name="id" type="xs:ID" />

<xs:complexType name="EMPLIST_type">
  <xs:sequence>
    <xs:element ref="EMPLOYEE" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="EMPLOYEE_type">
  <xs:sequence>
    <xs:element ref="NAME" />
  </xs:sequence>
  <xs:attribute ref="id" use="required" />
</xs:complexType>

</xs:schema>

(b)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.abc.com/EMP-Schema"
    xmlns:ns1="http://www.abc.com/EMP-Schema">

<xs:element name="EMPLIST" type="ns1:EMPLIST_type" />
<xs:element name="EMPLOYEE" type="ns1:EMPLOYEE_type" />
<xs:element name="NAME" type="xs:string" />
<xs:attribute name="id" type="xs:ID" />

<xs:complexType name="EMPLIST_type">
  <xs:sequence>
    <xs:element ref="ns1:EMPLOYEE" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="EMPLOYEE_type">
  <xs:sequence>
    <xs:element ref="ns1:NAME" />
  </xs:sequence>
  <xs:attribute ref="ns1:id" use="required" />
</xs:complexType>

</xs:schema>

(c)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.abc.com/EMP-Schema"
    elementFormDefault="qualified">

<xs:element name="EMPLIST" type="EMPLIST_type" />
<xs:element name="EMPLOYEE" type="EMPLOYEE_type" />
<xs:element name="NAME" type="xs:string" />

<xs:complexType name="EMPLIST_type">
  <xs:sequence>
    <xs:element ref="EMPLOYEE" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="EMPLOYEE_type">
  <xs:sequence>
    <xs:element ref="NAME" />
  </xs:sequence>
  <xs:attribute name="id" type="xs:ID" use="required"
    form="qualified"/>
</xs:complexType>

</xs:schema>

(d)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.abc.com/EMP-Schema"
    xmlns:ns1="http://www.abc.com/EMP-Schema"
    elementFormDefault="qualified">

<xs:element name="EMPLIST" type="ns1:EMPLIST_type" />
<xs:element name="EMPLOYEE" type="ns1:EMPLOYEE_type" />
<xs:element name="NAME" type="xs:string" />


<xs:complexType name="EMPLIST_type">
  <xs:sequence>
    <xs:element ref="ns1:EMPLOYEE" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="EMPLOYEE_type">
  <xs:sequence>
    <xs:element ref="ns1:NAME" />
  </xs:sequence>
  <xs:attribute name="id" type="xs:ID" use="required"
    form="qualified" />
</xs:complexType>

</xs:schema>



まとめノート:XML Schemaを利用したスキーマ定義

○今回の試験対策のポイント

  • XML Schemaの概要
    • 仕様概要
    • 特徴とDTDとの比較
    • データ型体系
  • XML Schemaの構造
    • ルート要素
    • XMLデータ構造の理解
    • 複合型の宣言
    • 要素の宣言
    • 属性の宣言
  • XML 文書とXML Schema文書の関連付け

○今回の学習内容で出題範囲となる仕様

○今回の学習内容で参考になる@ITの記事

○今回の学習内容で参考になるXML用語集 @IT XML用語事典より)

(15)XML Schema―型の再利用と名前空間 

Index
連載:XMLマスターへの道
  (1)XMLマスター:ベーシック試験のレベルは?
  (2)XMLの概要と起源、関連規格
  (3)XML文書の要素、エンコーディング、宣言
  (4)すべてのXM文書は整形式である
  (5)valid XMLとDTDの関係
  (6)模擬問題:XMLの基本
  (7)模擬問題:W3C XML Schema
  (8)模擬問題:DOM
  (9)DTDの実体宣言と記法宣言
  (10)XSLTの基本構造を理解する
  (11)XSLTで必須の制御命令を覚える
  (12)XPathによるノードの指定法を理解する
  (13)名前空間を理解しDOMの概要をつかむ
(最終回)XML Schemaを利用したスキーマ定義
  (15)XML Schema―型の再利用と名前空間


連載:XMLマスターへの道


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間