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:
Element prostego typu
Pusty element
Pusty element z atrybutami
Element z atrybutami i prostą zawartością
Element z sekwencją elementów podrzędnych
Element z sekwencją elementów podrzędnych i atrybutów
Element z sekwencją wyborów elementów podrzędnych
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 maxOccurs
xs: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 maxOccurs
xs: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.