DTD がアクティブなドキュメントの場合、 DTD をスキーマに変換 コマンドが有効化されます。DTD を XML スキーマドキュメント (XSD) に変換します。
コマンドにより、 複合型要素の要素 または 複合型への変換を選択することのできる、DTD を W3C スキーマに変換する ダイアログがポップアップします (下のスクリーンショット)。「OK」 をクリックすると、生成された XSD ファイルを保存する場所を選択するようにプロンプトされます。 変換を実行するために「保存」をクリックします。XMLSpy XSD ファイルが生成され、内で開かれます。

DTD を XML スキーマに変換する場合、 XMLSpy により、情報が限られているため、いくつかの想定がなされます。最も顕著な例は、 特定の DTD コンポーネントの値が、構文的な解析よりも、文字通り扱われる点です。 これは、プログラムが複数の使用の可能性について特定できないためです。この場合、 生成された変換を変更する必要があります。
拡張するために、生成された変換を注意深く確認する必要がある場合、修正の必要がある可能性のある箇所は以下にリストされています。
属性 Datatyping
DTD は 10 属性 データ型のみを許可しますが、 XML スキーマは、例えば、40 以上のデータ型 と派生する データ型を許可します。 生成された XML スキーマを拡張する場合、 例えば、更に制約された データ型を使用する場合などがあげられます。 XML スキーマが DTD に変換される 場合、データ型 情報は、失われます。
DTD は、名前空間を考慮していません。 この結果、名前空間は DTD 内で指定され、要素と属性名内にハードコードされている必要があります。これは、1つのスキーマから他のスキーマに変換する際に問題を引き起こす可能性があります。
XML スキーマには DTD のための一般的なエンティティ宣言に相当する宣言は存在しません。 XMLSpy が DTD を XML スキーマに変換する場合、エンティティ宣言は無視されます。
DTD と XML スキーマは、解析されていないデータを扱うために異なるメカニズムを使用します。 この点に関しては下で説明されています。
DTD は次のしくみを使用します:
•表記は宣言されており、名前と識別子により構成されています。例えば、:
<!NOTATION gif SYSTEM "image/gif">
•エンティティを宣言します。 例えば、:
<!ENTITY cover_img SYSTEM "graphics/cover_img.gif" NDATA gif>
•通常、対応する属性上で ENTITY の属性の型を指定します。 例えば、:<!ELEMENT img EMPTY>
<!ATTLIST img format ENTITY #REQUIRED>
XML スキーマ内での、 対応するメカニズムは、以下のとおりです:
•表記法を宣言します。この関数は、 DTD と同じ方法です。
<xs:notation name="gif" public="image/gif"/>
public 属性 は、識別子を持つためには必須であることに注意してください。 任意の system 属性にはシステム識別子が存在し、通常、表記型のリソースと作業できる実行可能です。
•NOTATION データ型を使用して、 notation 宣言を与えられた属性値と関連付けます。しかしながら、 NOTATION データ型 を直接使用することはできず、 NOTATION データ型から他のデータ型を派生する必要があります。
<xs:simpleType name="formatType">
<xs:restriction base="xs:NOTATION">
<xs:enumeration value="gif"/>
<xs:enumeration value="jpeg"/>
</xs:restriction>
</xs:simpleType>
•属性を NOTATION データ型から派生したデータ型に関連付けます。例:
<xs:complexType name="imgType">
<xs:attribute name="height"/>
<xs:attribute name="width"/>
<xs:attribute name="location"/>
<xs:attribute name="format" type="formatType" use="required"/>
</xs:complexType>
<xs:element name="img" type="imgType"/>
DTD から XML スキーマへ変換する場合、 XMLSpy は以下をおこないます:
•以下は
<!ATTLIST image format ENTITY #REQUIRED
...>
以下に変換されます
<xs:attribute name="format" type="xs:ENTITY" use="required"/>
•以下は
<!NOTATION gif SYSTEM "image/gif">
以下に変換されます
<xs:notation name="gif" system="image/gif"/>
以下の変更を加えます:
1.<xs:notation name="gif" system="image/gif"/> のような表記は、 system を public と置換え、任意のシステム識別子を必要な場合追加します。
2.NOTATION データ型から formatType のために説明されているとおりから派生します。
3.派生したデータ型対応した属性と関連付けします。
| メモ: | XML スキーマ仕様に従い、必要に応じて外部エンティティを宣言します。 |