Udostępnij przez


Poziom obsługi schematu

W tej sekcji omówiono szczegółowe informacje dotyczące poziomu obsługi schematu.

Schemat obsługuje bezpośrednio następujące elementy:

  • Sekwencje elementów.
  • Wyprowadzanie typów elementów.
  • Proste opcje elementów (te, które są mapowane na otagowany związek).
  • Podstawowe typy zdefiniowane przez format binarny XSD/.NET, w tym zakresy (min/maksimum).
  • Prosta obsługa dowolnego elementu (brak ograniczeń dotyczących typu elementu).
  • Opcjonalne elementy i atrybuty z wartościami domyślnymi.
  • Powtarzanie elementów z zakresami (minimalna/maksymalna).
  • Elementy, które można zmiecić.

Schemat nie obsługuje następującego bezpośrednio (co oznacza zachowanie "rezerwowe"):

  • Zdefiniowane przez użytkownika typy podstawowe.
  • Bardziej skomplikowane wybory.
  • Odrzucanie nieznanych atrybutów.
  • Zaokrąglanie nieznanych atrybutów.
  • Bardziej skomplikowana obsługa każdego elementu.
  • Cała konstrukcja.
  • Klucz/kluczref.

Poniżej przedstawiono szczegółowy podział obsługi różnych składników schematu. Jest porównywany z kontraktem danych w programie WCF, ponieważ podobieństwo w funkcjach. Różnica zostanie opisana.

Ogólnie rzecz biorąc, w przypadku zachowań rezerwowych:

  • atrybuty są poparte WS_STRING;
  • zawartość elementu jest tworzona w oparciu o WS_XML_BUFFER.
  • obiekt complexType jest wspierany do struktury zawierającej pole WS_XML_BUFFER.
  • Proste typy są wspierane do WS_STRING.

Program wsutil generuje ostrzeżenia dotyczące składników schematu, które nie są obecnie w pełni obsługiwane. Aplikacja może wymagać dodatkowej weryfikacji dla tych składników. Narzędzia w godzinach nadliczbowych można ulepszyć, aby obsługiwać niektóre funkcje, które są obecnie obsługiwane w środowisku uruchomieniowym, na przykład obsługa wartości domyślnych. Narzędzia wsutil można również ulepszyć wraz z serializacji, aby obsługiwać inne funkcje, takie jak abstrakcyjne. W czasie można zmniejszyć liczbę nieobsługiwanych składników schematu.

Ogólny dokument schematu

Definicja globalna, która może mieć wpływ na definicje osadzone w schemacie. Są to atrybuty globalne, które mają zastosowanie do wszystkich definicji w schemacie.

atrybuty <xs:schema>

  • attributeFromDefault zignorowany.
  • blockDefault Zignorowano.
  • elementFormDefault zignorowany. Różni się to od danychContract, ponieważ niekwalifikowane elementy są obsługiwane w środowisku uruchomieniowym.
  • finalDefault Zignorowano. Nie ma obsługi języka C dla koncepcji finalnej.
  • identyfikator zignorowany.
  • targetNamespace Supported i zamapowany na przestrzeń nazw usługi.
  • wersja zignorowana.

<zawartość> xs:schema

  • uwzględnij obsługiwane; Narzędzie wsutil wymaga, aby wszystkie niezbędne definicje są dostępne jako pliki wejściowe w czasie kompilacji.
  • ponownie zdefiniować zignorowane. Narzędzie wsutil nie obsługuje tego.
  • importowanie obsługiwane; Narzędzie wsutil wymaga, aby wszystkie niezbędne definicje są dostępne jako pliki wejściowe w czasie kompilacji.
  • simpleType Supported — zobacz sekcję prostego typu poniżej.
  • complexType Supported — zobacz sekcję "complexType"
  • grupa zignorowana.
  • attributeGroup ignorowane.
  • element Obsługiwany; mapuje na definicje elementów globalnych.
  • atrybut Obsługiwany; mapuje na definicje atrybutów globalnych.
  • notacja ignorowana

Typ złożony

Typ złożony reprezentowany przez <xs:complexType>może być ograniczeniem prostego typu lub typu złożonego, rozszerzenia prostego typu, tablic lub struktury. Zauważ, że w rozszerzeniu typów prostych nie ma dziedziczenia i nie ma obsługi xsi:type.

atrybuty <xs:complexType>

  • abstract Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • blokuj Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • final Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • identyfikator zignorowany.
  • Mieszane generowanie ostrzeżenia o nieobsługiwanej funkcji, powrót do struktury z WS_XML_BUFFER, jeśli prawda.
  • nazwa Obsługiwana i mapowana na nazwę typu struktury.

<zawartość> xs:complexType

Jest to definicja typu struktury. ograniczenie complexContent nie jest obsługiwane.

  • complexContent — obsługa złożonego rozszerzenia zawartości. Mapuje na dziedziczenie struktury.
  • grupa Obecnie powrót do struktury z polem WS_XML_BUFFER. Można wspierać zgodnie z cząstką pod spodem.
  • wybór obsługiwany jako unia. Nie jest to obsługiwane w umowie danych.
  • sekwencja obsługiwana — mapuje na pola struktury
  • atrybut obsługiwany z jednym wyjątkiem "zabronione". powrót do struktury z WS_XML_BUFFER, jeśli "zabronione".
  • attributeGroup obsługiwane — mapuje na sekwencję atrybutów
  • anyAttribute ignorowane
  • AttributeGroupRef Supported — mapuje na sekwencję atrybutów.
  • GroupRef Obecnie powrót do struktury z polem WS_XML_BUFFER. Może być obsługiwane zgodnie z pod grupą.
  • Wszystkie obsługiwane, mapuje na XML_BUFFER
  • (puste) obsługiwana mapa z pustym opisem struktury bez wygenerowanej struktury.

<xs:sequence> w typie złożonym: zawartość

wsutil tylko w pełni obsługują sekwencję minOccurs = 1 i maxOccurs = 1; w przeciwnym razie typ złożony jest obecnie wspierany do WS_XML_BUFFER. Może być obsługiwany jako tablica struktur.

  • element Obsługiwany; każde wystąpienie mapuje na pole w strukturze.
  • Rezerwowa grupa; parametr complexType jest rezerwowy do WS_XML_BUFFER.
  • Wszystkie rezerwowe; parametr complexType jest rezerwowy do WS_XML_BUFFER.
  • wybór obsługiwany; mapuj na pole unii.
  • rezerwowa sekwencja; parametr complexType jest rezerwowy do WS_XML_BUFFER.
  • obsługiwane; zamapowane na XML_BUFFER.
  • (puste) obsługiwane; complexType może być pustą strukturą, jeśli nie ma atrybutów.

Pierwiastki

<xs:element>może wystąpić w trzech kontekstach.

  • Może wystąpić w <xs:sequence>, opisując pole zwykłej struktury. W takim przypadku atrybut maxOccurs musi mieć wartość 1. Pole jest opcjonalne, jeśli wartość minOccurs wynosi 0.
  • Może wystąpić w <xs:sequence>, opisując pole tablicy. W takim przypadku atrybut maxOccurs musi być większy niż 1 lub "bez ruchu".
  • Może wystąpić w <xs:schema> jako opis elementu globalnego.

<xs:element> w <xs:sequence> lub <xs:choice> jako pole w strukturze

  • ref Supported; rozwiązano problem z odwołaniem do elementu globalnego.
  • nazwa Obsługiwana, mapuje na nazwę pola.
  • wpisz Obsługiwane, mapuje na typ pola. Aby uzyskać więcej informacji, zobacz "Mapowanie typów". Jeśli nie zostanie określony (i element nie zawiera typu anonimowego), przyjmuje się, że xs:anyType.
  • blokuj Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • Domyślne generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • naprawiono generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • formularz ignorowany. Nasza warstwa serializacji obsługuje zarówno kwalifikowane, jak i niekwalifikowane formy.
  • identyfikator zignorowany.
  • wartość maxOccurs mapuje na jedno pole danych, jeśli jest równe 1. jest mapowany na pole tablicy (element powtarzający), jeśli wartość maxOccurs jest większa niż 1.
  • minOccurs, jeśli 0, opcje pola są ustawione na FIELD_OPTIONAL, jeśli nie ustawiono parametru nillable.
  • nillable Pole jest nillable. Aby uzyskać więcej szczegółów, zobacz Serializacja.

<xs:element> jako element globalny: atrybuty

atrybuty minOccurs i maxOccurs są nieprawidłowe jako opis elementu globalnego. Aplikacja może używać wygenerowanego opisu elementu bezpośrednio w warstwie serializacji lub warstwach kanału.

  • abstract Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • blokuj Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • Domyślne generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • final Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • naprawiono generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • identyfikator zignorowany.
  • name Supported — mapuj na nazwę opisu elementu globalnego i jest podstawą typu anonimowego po określeniu.
  • Aplikacja ignorowana wymaga wywołania z flagą prawą.
  • substytucjaGrupa rezerwowa do struktury z WS_XML_BUFFER, jeśli ustawiono. narzędzie wsutil nie obsługuje elementu subsutilGroup.
  • wpisz Obsługiwane i mapuj na typ elementu.

<xs:element> jako element globalny: contents

  • simpleType Obsługiwane; mapuje na definicję typu.
  • supported complexType; mapuje na typ złożony.
  • unikatowe generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu. narzędzie wsutil nie obsługuje ograniczeń elementów.
  • key Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu. narzędzie wsutil nie obsługuje ograniczeń elementów.
  • keyref Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu. narzędzie wsutil nie obsługuje ograniczeń elementów.
  • (puste) Obsługiwane; element bez specyfikacji typu jest traktowany jako xs:anyType.

Proste typy

atrybuty <xs:simpleType>

  • Końcowe generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • Identyfikator ignorowany
  • Nazwa obsługiwana, mapuje na nazwę typu.

<xs:simpleType> zawartość

  • Obsługiwane ograniczenie, mapuje na typ wyliczenia lub zakres. Zobacz sekcję "ograniczenia xs:simpleType".
  • Generowanie listy ostrzeżenie dotyczące nieobsługiwanej funkcji, powrót do XML_BUFFER.
  • Union Generate warning about unsupported feature( Generowanie ostrzeżenia o nieobsługiwanej funkcji, powrót do XML_BUFFER).

Ograniczenie typu prostego

Niektóre aspekty są dozwolone w typach całkowitych i ciągach, aby umożliwić obsługę zakresu i wyliczenia.

Obsługa wyliczania

<xs:enumeration> proste ograniczenie typu dla podstawowego typu ciągu jest traktowane jako typ wyliczenia. W tym przypadku atrybut Podstawowy MUSI być typem ciągu. W przypadku wyliczenia wszystkie inne aspekty są ignorowane.

zakres obsługi prostego typu

Niektóre aspekty są obsługiwane w prostych typach obsługują skutecznie zakres dozwolony dla typu. Poniżej przedstawiono ograniczenia dotyczące typów całkowitych i typów zmiennoprzecinkowych/podwójnych. Proste typy z innymi aspektami są oparte na typie WS_STRING

  • Minimalna obsługiwana funkcjaexclusive
  • minInclusive Supported (Obsługiwane przez minInclusive)
  • maxExclusive Supported (maksymalna obsługiwana funkcja maxExclusive)
  • maxInclusive Supported
  • totalDigits Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • fractionDigits Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • length Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • minLength Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • maxLength Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • Wyliczenie Generowanie ostrzeżenia o nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • WhiteSpace Generuj ostrzeżenie dotyczące nieobsługiwanej funkcji, bez zmiany generowania kodu.
  • pattern Generate warning about unsupported feature( Generowanie ostrzeżenia o nieobsługiwanej funkcji, brak zmian w generowaniu kodu).
  • (puste) Obsługiwane.

funkcja minLength i maxLength w ciągu nie jest obecnie obsługiwana, ale jest pożądaną funkcją do obsługi.

Dziedziczenie

Narzędzie Wsutil obsługuje dziedziczenie typów złożonych, czyli struktura może dziedziczyć z innej struktury, podobnie jak dziedziczenie interfejsu w języku C++. Odbywa się to za pomocą <xs:complexContentExtension>. <xs:simpleContentExtension> jest obsługiwana, ale jest generowana jako zwykła struktura z typem podstawowym jako pierwsze pole zamiast dziedziczenia typu.

Mapowanie typu/pierwotnego

Identyfikatory muszą być znormalizowane podczas tłumaczenia z ncNames w formacie XML. Ciągi są nillable; Typy wskaźników są nillable; typy całkowitoliczbowe i zmiennoprzecinkowe/podwójne są nillable, a wartość defaultValue jest ustawiona na 0.

Tabela przedstawiająca mapowanie między typami XSD a typami danych Szafir.