次の方法で共有


スキーマのノード型および構造を推論するときの規則

このトピックでは、スキーマ推論プロセスで、XML ドキュメント内のノード型を XML スキーマ定義言語 (XSD) 構造に変換する方法を説明します。

要素を推論するときの規則

このセクションでは、要素宣言を推論するときの規則を説明します。 推論される要素宣言には 8 つの構造があります。

  1. 単純型の要素

  2. 空要素

  3. 属性を持つ空要素

  4. 属性と単純内容を持つ要素

  5. 子要素のシーケンスを持つ要素

  6. 子要素のシーケンスと属性を持つ要素

  7. 子要素のシーケンスと choice を持つ要素

  8. 子要素のシーケンスと choice を持つ要素

Note

すべての complexType 宣言は匿名型として推論されます。 推論されるグローバル要素はルート要素だけであり、その他すべての要素はローカル要素です。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

単純型要素

InferSchema メソッドへの XML 入力と、生成される XML スキーマを次の表に示します。 太字になっている要素は、単純型要素から推論されるスキーマです。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

XML Schema
<?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 Schema
<?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 Schema
<?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 Schema
<?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 スキーマを次の表に示します。 太字になっている要素は、子要素のシーケンスを持つ要素から推論されるスキーマです。

Note

要素が子要素を 1 つしか持っていない場合でも、子要素はシーケンスとして扱われます。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

XML Schema
<?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 スキーマを次の表に示します。 太字になっている要素は、子要素のシーケンスと属性を持つ要素から推論されるスキーマです。

Note

要素が子要素を 1 つしか持っていない場合でも、子要素はシーケンスとして扱われます。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

XML Schema
<?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 を持つ要素から推論されるスキーマです。

Note

maxOccurs 要素の xs:choice 属性は、推論されるスキーマでは "unbounded" に設定されます。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

XML Schema
<?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 および属性を持つ要素から推論されるスキーマです。

Note

maxOccurs 要素の xs:choice 属性は、推論されるスキーマでは "unbounded" に設定されます。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

XML Schema
<?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" として追加されます。

出現回数に関する制約

スキーマ推論プロセスでは、推論されるスキーマのコンポーネントに対して、値が minOccurs または maxOccurs"0" 属性と、値が "1" または "1""unbounded" 属性が生成されます。 値 "1" および "unbounded" は、値 "0" および "1" では XML ドキュメントを検証できない場合にのみ使われます (たとえば、MinOccurs="0" では要素を正確に記述できない場合は、minOccurs="1" が使われます)。

混合コンテンツ

テキストに要素が混じっているなど、要素に混合コンテンツが含まれている場合は、推論される複合型の定義に対して mixed="true" 属性が生成されます。

その他のノードの型推論規則

処理命令、コメント、エンティティ参照、CDATA、ドキュメント型、名前空間の各ノード型に関する推論の規則を次の表に示します。

ノード型 変換
処理命令 無視されます。
コメント 無視されます。
エンティティ参照 XmlSchemaInference クラスではエンティティ参照を処理しません。 XML ドキュメントにエンティティ参照が含まれている場合は、エンティティを展開するリーダーを使用する必要があります。 たとえば、XmlTextReader プロパティを EntityHandling に設定した ExpandEntities をパラメーターとして渡すことができます。 エンティティ参照が検出されたにもかかわらず、リーダーがエンティティを展開しない場合は、例外がスローされます。
CDATA XML ドキュメント内のすべての <![CDATA[ … ]] セクションが xs:string として推論されます。
ドキュメント型 無視されます。
名前空間 無視されます。

スキーマ推論プロセスの詳細については、「XML ドキュメントからのスキーマの推論」を参照してください。

関連項目