スキーマ ノードの種類と構造を推論するための規則

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

要素推論規則

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

  1. 単純型の要素

  2. 空の要素

  3. 属性を持つ空の要素

  4. 属性と単純なコンテンツを含む要素

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

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

  7. 子要素の一連の選択肢を持つ要素

  8. 子要素と属性の一連の選択肢を持つ要素

注

すべての 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 スキーマを示します。 太字の要素は、子要素のシーケンスと選択を持つ要素に対して推論されたスキーマを示しています。

注

maxOccurs要素のxs:choice属性は、推論されたスキーマで"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>

子要素および属性の並びと選択を含む要素

次の表に、 InferSchema メソッドへの XML 入力と生成された XML スキーマを示します。 太字の要素は、子要素と属性のシーケンスと選択を持つ要素に対して推論されたスキーマを示しています。

注

maxOccurs要素のxs:choice属性は、推論されたスキーマで"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"を使用して、既存の宣言に新しい属性が追加されます。

発生の制約

スキーマ推論プロセス中に、スキーマの推定コンポーネントの 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 ドキュメントからのスキーマの推論」を参照してください。

こちらも参照ください