スキーマのノード型および構造を推論するときの規則
このトピックでは、スキーマ推論プロセスで、XML ドキュメント内のノード型を XML スキーマ定義言語 (XSD) 構造に変換する方法を説明します。
要素を推論するときの規則
このセクションでは、要素宣言を推論するときの規則を説明します。 推論される要素宣言には 8 つの構造があります。
単純型の要素
空要素
属性を持つ空要素
属性と単純内容を持つ要素
子要素のシーケンスを持つ要素
子要素のシーケンスと属性を持つ要素
子要素のシーケンスと choice を持つ要素
子要素のシーケンスと choice を持つ要素
メモ |
---|
すべての complexType 宣言は匿名型として推論されます。推論されるグローバル要素はルート要素だけであり、その他すべての要素はローカル要素です。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
単純型要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、単純型要素から推論されるスキーマです。
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root>text</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root" type="xs:string" /> </xs:schema> |
空の要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、空要素から推論されるスキーマです。
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <empty/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty" /> </xs:schema> |
属性を持つ空要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、属性を持つ空要素から推論されるスキーマです。
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <empty attribute1="text"/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty"> <xs:complexType> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
属性と単純内容を持つ要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、属性と単純内容を持つ要素から推論されるスキーマです。
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root attribute1="text">value</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:schema> |
子要素のシーケンスを持つ要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、子要素のシーケンスを持つ要素から推論されるスキーマです。
メモ |
---|
要素が子要素を 1 つしか持っていない場合でも、子要素はシーケンスとして扱われます。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root> <subElement/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
子要素のシーケンスと属性を持つ要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、子要素のシーケンスと属性を持つ要素から推論されるスキーマです。
メモ |
---|
要素が子要素を 1 つしか持っていない場合でも、子要素はシーケンスとして扱われます。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
子要素のシーケンスと choice を持つ要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっているスキーマは、子要素のシーケンスと choice を持つ要素から推論されるスキーマです。
メモ |
---|
xs:choice 要素の maxOccurs 属性は、推論されるスキーマでは "unbounded" に設定されます。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
子要素のシーケンスと choice および属性を持つ要素
InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、子要素のシーケンスと choice および属性を持つ要素から推論されるスキーマです。
メモ |
---|
xs:choice 要素の maxOccurs 属性は、推論されるスキーマでは "unbounded" に設定されます。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。
XML |
スキーマ |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
属性の処理
ノード内で新しい属性が検出されるたびに、その属性は推論されるノードの定義に use="required" として追加されます。 そのインスタンスで同じノードが再び検出されると、推論プロセスでは、現在のインスタンスの属性と、既に推論されている属性を比較します。 既に推論されている属性の一部がインスタンスにない場合は、属性の定義に use="optional" が追加されます。 新しい属性は、既存の宣言に use="optional" として追加されます。
出現回数に関する制約
スキーマ推論プロセスでは、推論されるスキーマのコンポーネントに対して、値が "0" または "1" の minOccurs 属性と、値が "1" または "unbounded" の maxOccurs 属性が生成されます。 値 "1" および "unbounded" は、値 "0" および "1" では XML ドキュメントを検証できない場合にのみ使われます (たとえば、MinOccurs="0" では要素を正確に記述できない場合は、minOccurs="1" が使われます)。
混合コンテンツ
テキストに要素が混じっているなど、要素に混合コンテンツが含まれている場合は、推論される複合型の定義に対して mixed="true" 属性が生成されます。
その他のノード型に関する推論の規則
処理命令、コメント、エンティティ参照、CDATA、ドキュメント型、名前空間の各ノード型に関する推論の規則を次の表に示します。
ノード型 |
変換 |
---|---|
処理命令 |
無視されます。 |
コメント |
無視されます。 |
エンティティ参照 |
XmlSchemaInference クラスではエンティティ参照を処理しません。 XML ドキュメントにエンティティ参照が含まれている場合は、エンティティを展開するリーダーを使用する必要があります。 たとえば、EntityHandling プロパティを ExpandEntities に設定した XmlTextReader をパラメーターとして渡すことができます。 エンティティ参照が検出されたにもかかわらず、リーダーがエンティティを展開しない場合は、例外がスローされます。 |
CDATA |
XML ドキュメント内のすべての <![CDATA[ … ]] セクションが xs:string として推論されます。 |
ドキュメント型 |
無視されます。 |
名前空間 |
無視されます。 |
スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。