Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 kolejnością wyboru elementów podrzędnych
Element z sekwencją opcji elementów podrzędnych i atrybutów
Uwaga / Notatka
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 typizowany element
W poniższej tabeli przedstawiono dane wejściowe XML do metody InferSchema oraz 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 XML do metody InferSchema oraz 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 XML do metody InferSchema oraz 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 XML do metody InferSchema oraz 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 XML do metody InferSchema oraz wygenerowany schemat XML. Elementy pogrubione pokazują wywnioskowany schemat dla elementu z sekwencją elementów podrzędnych.
Uwaga / Notatka
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 zawierający sekwencję elementów podrzędnych i atrybuty
W poniższej tabeli przedstawiono dane wejściowe XML do metody InferSchema oraz wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją elementów podrzędnych i atrybutów.
Uwaga / Notatka
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 opcjami elementów podrzędnych
W poniższej tabeli przedstawiono dane wejściowe XML do metody InferSchema oraz wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu zawierającego sekwencję i wybór elementów podrzędnych.
Uwaga / Notatka
Atrybut maxOccurs
elementu xs:choice
jest ustawiony na "unbounded"
w 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 spośród elementów podrzędnych oraz atrybutów
W poniższej tabeli przedstawiono dane wejściowe XML do metody InferSchema oraz wygenerowany schemat XML. Pogrubione elementy pokazują schemat wywnioskowany dla elementu z sekwencją i wyborem elementów podrzędnych i atrybutów.
Uwaga / Notatka
Atrybut maxOccurs
elementu xs:choice
jest ustawiony na "unbounded"
w 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"
. Następnym razem, gdy ten sam węzeł zostanie znaleziony w wystąpieniu, proces wnioskowania porówna atrybuty bieżącego wystąpienia z tymi, które już zostały wywnioskowane. 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 wnioskowania schematu minOccurs
i maxOccurs
atrybuty są generowane dla składników wywnioskowanych schematu z wartościami "0"
lub "1"
, oraz "1"
lub "unbounded"
. Wartości "1"
i "unbounded"
są używane tylko wtedy, gdy wartości "0"
i "1"
nie mogą zweryfikować dokumentu XML (na przykład, jeśli MinOccurs="0"
nie dokładnie opisuje elementu, zostaje użyta minOccurs="1"
).
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 dotyczące typów węzłów
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 |
---|---|
Instrukcja przetwarzania | 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 jako parametr. Jeśli zostaną napotkane odwołania do jednostek i czytelnik nie rozszerza jednostek, zostaje zgłoszony wyjątek. |
CDATA | Wszystkie <![CDATA[ … ]] sekcje w dokumencie XML zostaną wywnioskowane jako xs:string . |
Rodzaj dokumentu | Ignorowane. |
Przestrzenie nazw | Ignorowane. |
Aby uzyskać więcej informacji na temat procesu wnioskowania schematu, zobacz Wnioskowanie schematów z dokumentów XML.