次の方法で共有


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

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

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

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

  1. 単純型の要素

  2. 空要素

  3. 属性を持つ空要素

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

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

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

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

  8. 子要素のシーケンスと 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 ドキュメントからのスキーマの推論」を参照してください。

参照

参照

XmlSchemaInference

概念

XML スキーマの推論

XML ドキュメントからのスキーマの推論

単純型を推論するときの規則

その他の技術情報

XML スキーマ オブジェクト モデル (SOM)