Zasady wnioskowania typów prostych
Opisuje sposób XmlSchemaInference wnioskowania typu danych przez klasę atrybutów i elementów.
Klasa XmlSchemaInference wywnioskuje typ danych atrybutów i elementów jako proste typy. W tej sekcji opisano potencjalne typy wnioskowane, sposób uzgadniania wielu różnych wartości z pojedynczym typem oraz sposobu obsługi atrybutów definiujących xsi
schemat.
Wnioskowane typy
Klasa XmlSchemaInference wywnioskuje wartości elementu i atrybutu jako proste typy i zawiera atrybut typu w wynikowym schemacie. Wszystkie wnioskowane typy są prostymi typami. Żadne typy podstawowe ani aspekty nie są uwzględniane w ramach wynikowego schematu.
Wartości są badane indywidualnie, ponieważ występują w dokumencie XML. Typ jest wnioskowany dla wartości w momencie jego zbadania. Jeśli typ został wywnioskowany dla atrybutu lub elementu, a napotkana jest wartość atrybutu lub elementu, która nie jest zgodna z aktualnie wnioskowanym typem, XmlSchemaInference klasa promuje typ dla każdego zestawu reguł. Te reguły zostały omówione w sekcji Promocja typów w dalszej części tego tematu.
W poniższej tabeli wymieniono możliwe typy wnioskowane dla wynikowego schematu.
Prosty typ | opis |
---|---|
boolean | Prawda, fałsz, 0, 1. |
byte | Liczby całkowite w zakresie od –128 do 127. |
unsignedByte | Liczby całkowite z zakresu od 0 do 255. |
short | Liczby całkowite w zakresie od –32768 do 32767. |
unsignedShort | Liczby całkowite z zakresu od 0 do 65535. |
int | Liczby całkowite w zakresie –2147483648 do 2147483647. |
Unsignedint | Liczby całkowite z zakresu od 0 do 4294967295. |
długi | Liczby całkowite w zakresie –9223372036854775808 do 9223372036854775807. |
unsignedLong | Liczby całkowite z zakresu od 0 do 18446744073709551615. |
integer | Skończona liczba cyfr prawdopodobnie poprzedzona znakiem "-". |
decimal | Wartości liczbowe zawierające od 0 do 28 cyfr precyzji. |
liczba zmiennoprzecinkowa | Liczba dziesiętna opcjonalnie następuje po znaku "E" lub "e", po której następuje wartość całkowita reprezentująca wykładnik. Wartości dziesiętne mogą znajdować się w zakresie -16777216 do 16777216. Wartości wykładnicze mogą należeć do zakresu od –149 do 104. Zmiennoprzecinkowy umożliwia wartości specjalne reprezentujące nieskończoność i wartości nieliczbowe. Wartości specjalne dla zmiennoprzecinkowych to: 0, -0, INF, -INF, NaN. |
double | Takie same jak wartości zmiennoprzecinkowe z wyjątkiem wartości dziesiętnych mogą być w zakresie -9007199254740992 do 9007199254740992, a wartości wykładnicze mogą mieścić się w zakresie od –1075 do 970. Funkcja Double umożliwia reprezentowanie wartości specjalnych nieskończoności i wartości nieliczbowych. Wartości specjalne dla zmiennoprzecinkowych to: 0, -0, INF, -INF, NaN. |
czas trwania | Format czasu trwania W3C. |
Data i godzina | Format daty/godziny W3C. |
time | Format czasu W3C. |
data | Wartości roku są ograniczone z zakresu od 0001 do 9999. |
gYearMonth | Format miesiąca i roku W3C Gregorian. |
string | Co najmniej jeden znak Unicode. |
Promocja typu
Klasa XmlSchemaInference sprawdza wartości atrybutów i elementów pojedynczo. W miarę napotkania wartości najbardziej restrykcyjny, niepodpisany typ jest wnioskowany. Jeśli typ został wywnioskowany dla atrybutu lub elementu, a napotkana jest nowa wartość, która nie jest zgodna z aktualnie wnioskowanym typem, wnioskowany typ jest promowany do nowego typu, który ma zastosowanie zarówno do aktualnie wnioskowanego typu, jak i nowej wartości. Klasa XmlSchemaInference uwzględnia poprzednie wartości podczas podwyższania wartości wywnioskowanych typów.
Rozważmy na przykład następujące fragmenty XML z dwóch dokumentów XML:
<MyElement1 attr1="12" />
<MyElement1 attr1="52344" />
Po napotkaniu pierwszej attr1
wartości typ attr1
jest wywnioskowany na unsignedByte
podstawie wartości 12
. Po napotkaniu drugiego attr1
typ jest promowany na unsignedShort
podstawie aktualnie wnioskowanego typu unsignedByte
i bieżącej wartości 52344
.
Teraz rozważ następujący kod XML z dwóch dokumentów XML:
<MyElement2 attr2="0" />
<MyElement2 attr2="true" />
Po napotkaniu pierwszej attr2
wartości typ attr2
jest wywnioskowany na unsignedByte
podstawie wartości 0
. Po napotkaniu drugiego attr2
typ jest promowany na string
podstawie aktualnie wnioskowanego typu unsignedByte
i bieżącej wartości true
, ponieważ XmlSchemaInference klasa uwzględnia poprzednie wartości podczas podwyższania typu wnioskowanego. Jeśli jednak oba wystąpienia programu zostały napotkane w tym samym dokumencie XML, a nie w dwóch różnych dokumentach attr2
XML, jak pokazano powyżej, attr2
zostałyby wywnioskowane jako boolean
.
Ignorowane atrybuty z https://www.w3.org/2001/XMLSchema-instance przestrzeni nazw
Poniżej przedstawiono atrybuty definiujące schemat, które są ignorowane podczas wnioskowania schematu.
Atrybut | opis |
---|---|
xsi:type |
Jeśli element zostanie napotkany z określoną wartością xsi:type , xsi:type element zostanie zignorowany. |
xsi:nil |
Jeśli napotkano element z atrybutem xsi:nil , jego deklaracja elementu w wnioskowanym schemacie ma wartość nillable="true" . Element z atrybutem ustawionym xsi:nil na true nie może mieć elementów podrzędnych. |
xsi:schemaLocation |
Jeśli xsi:schemaLocation wystąpi problem, zostanie zignorowany. |
xsi:noNamespaceSchemaLocation |
Jeśli xsi:noNamespaceSchemaLocation wystąpi problem, zostanie zignorowany. |