Udostępnij za pośrednictwem


Zasady wnioskowania typów węzłów schematu i struktury

W tym temacie opisano, jak proces wnioskowania schematu tłumaczy typy węzłów w dokumencie XML na strukturę języka definicji schematu XML (XSD).

Reguły wnioskowania elementów

W tej sekcji opisano reguły wnioskowania dla deklaracji elementów. Istnieją osiem struktur deklaracji elementów, które zostaną wywnioskowane:

  1. Element prostego typu

  2. Pusty element

  3. Pusty element z atrybutami

  4. Element z atrybutami i prostą zawartością

  5. Element z sekwencją elementów podrzędnych

  6. Element z sekwencją elementów podrzędnych i atrybutów

  7. Element z sekwencją wyborów elementów podrzędnych

  8. Element z sekwencją wyborów elementów podrzędnych i atrybutów

Uwaga

Wszystkie complexType deklaracje są wnioskowane jako typy anonimowe. Jedynym elementem globalnym wywnioskowanym jest element główny; wszystkie inne elementy są lokalne.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

Prosty typizowane, element

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubiony element pokazuje schemat wywnioskowany dla prostego elementu typu.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Pusty element

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubiony element pokazuje schemat wywnioskowany dla pustego elementu.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Pusty element z atrybutami

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla pustego elementu z atrybutami.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Element z atrybutami i prostą zawartością

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z atrybutami i prostą zawartością.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Element z sekwencją elementów podrzędnych

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją elementów podrzędnych.

Uwaga

Nawet jeśli element ma tylko jeden element podrzędny, nadal jest traktowany jako sekwencja.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Element z sekwencją elementów podrzędnych i atrybutów

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją elementów podrzędnych i atrybutów.

Uwaga

Nawet jeśli element ma tylko jeden element podrzędny, nadal jest traktowany jako sekwencja.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Element z sekwencją i wyborami elementów podrzędnych

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją i wyborem elementów podrzędnych.

Uwaga

Atrybut maxOccursxs:choice elementu jest ustawiony na "unbounded" wywnioskowanym schemacie.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Element z sekwencją i wyborem elementów podrzędnych i atrybutów

W poniższej tabeli przedstawiono dane wejściowe InferSchema XML metody i wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją i wyborem elementów podrzędnych i atrybutów.

Uwaga

Atrybut maxOccursxs:choice elementu jest ustawiony na "unbounded" wywnioskowanym schemacie.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

XML Schemat
<?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>

Przetwarzanie atrybutów

Za każdym razem, gdy nowy atrybut zostanie napotkany w węźle, zostanie dodany do wnioskowanej definicji węzła za pomocą polecenia use="required". Przy następnym znalezieniu tego samego węzła w wystąpieniu proces wnioskowania porówna atrybuty bieżącego wystąpienia z tymi, które już wywnioskują. Jeśli w wystąpieniu brakuje niektórych już wywnioskowanych elementów, use="optional" zostanie dodany do definicji atrybutu. Nowe atrybuty są dodawane do istniejących deklaracji za pomocą polecenia use="optional".

Ograniczenia dotyczące wystąpień

Podczas procesu minOccurs wnioskowania schematu atrybuty i maxOccurs są generowane dla składników wywnioskowanych schematu z wartościami "0" lub "1" lub "1""unbounded". Wartości i są używane tylko wtedy, gdy wartości "0""1" i "1""unbounded" nie mogą zweryfikować dokumentu XML (na przykład jeśli MinOccurs="0" nie dokładnie opisze elementu, minOccurs="1" jest używany).

Zawartość mieszana

Jeśli element zawiera zawartość mieszaną (na przykład tekst przeplatany elementami), mixed="true" atrybut jest generowany dla wnioskowanej definicji typu złożonego.

Inne reguły wnioskowania typu węzła

W poniższej tabeli opisano reguły wnioskowania dotyczące przetwarzania instrukcji, komentarzy, odwołań do jednostek, CDATA, typu dokumentu i węzłów przestrzeni nazw.

Typ węzła Tłumaczenie
Przetwarzanie instrukcji Ignorowane.
Komentarz Ignorowane.
Odwołanie do encji Klasa XmlSchemaInference nie obsługuje odwołań do jednostek. Jeśli dokument XML zawiera odwołania do jednostki, należy użyć czytnika, który rozszerza jednostki. Można na przykład przekazać element XmlTextReader z właściwością EntityHandling ustawioną na ExpandEntities parametr . Jeśli napotkano odwołania do jednostek, a czytelnik nie rozszerza jednostek, zgłaszany jest wyjątek.
CDATA Wszystkie <![CDATA[ … ]] sekcje w dokumencie XML zostaną wywnioskowane jako xs:string.
Document type Ignorowane.
Przestrzenie nazw Ignorowane.

Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.

Zobacz też