Udostępnij za pośrednictwem


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.

Zobacz też