Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Zgodnie z opisem w artykule xml (Transact-SQL) program SQL Server zapewnia natywny magazyn danych XML za pośrednictwem typu danych XML . Opcjonalnie można skojarzyć schematy XSD ze zmienną lub kolumną typu xml za pomocą kolekcji schematów XML. Kolekcja schematów XML przechowuje zaimportowane schematy XML, a następnie służy do wykonywania następujących czynności:
Weryfikowanie wystąpień XML
Wpisz dane XML przechowywane w bazie danych
Kolekcja schematów XML to jednostka metadanych, podobna do tabeli w bazie danych. Można je tworzyć, modyfikować i usuwać. Schematy określone w instrukcji CREATE XML SCHEMA COLLECTION (Transact-SQL) są automatycznie importowane do nowo utworzonego obiektu kolekcji schematów XML. Dodatkowe schematy lub składniki schematu można zaimportować do istniejącego obiektu kolekcji w bazie danych przy użyciu instrukcji ALTER XML SCHEMA COLLECTION (Transact-SQL).
Zgodnie z opisem w artykule Typed vs. Untyped XML, XML przechowywany w kolumnie lub zmiennej skojarzonej ze schematem jest nazywany typowanym XML, ponieważ schemat dostarcza niezbędne informacje o typach danych dla danych wystąpienia. Program SQL Server używa tych informacji o typie do optymalizacji magazynu danych.
Aparat przetwarzania zapytań używa również schematu do sprawdzania typów oraz optymalizacji zapytań i modyfikacji danych.
Ponadto program SQL Server używa skojarzonej kolekcji schematów XML z typem XML w celu zweryfikowania wystąpienia XML. Jeśli wystąpienie XML jest zgodne ze schematem, baza danych umożliwia przechowywanie wystąpienia w systemie przy użyciu informacji o typie. W przeciwnym razie odrzuca wystąpienie.
Za pomocą funkcji wewnętrznej XML_SCHEMA_NAMESPACE można pobrać kolekcję schematów przechowywaną w bazie danych. Aby uzyskać więcej informacji, zobacz Wyświetlanie przechowywanej kolekcji schematów XML.
Możesz również użyć kolekcji schematów XML, aby wpisać zmienne XML, parametry i kolumny.
DDL do zarządzania kolekcjami schematów
Kolekcje schematów XML można tworzyć w bazie danych i kojarzyć je ze zmiennymi i kolumnami typu xml . Aby zarządzać kolekcjami schematów w bazie danych, program SQL Server udostępnia następujące instrukcje DDL:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Importuje składniki schematu do bazy danych.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Modyfikuje składniki schematu w istniejącej kolekcji schematów XML.
DROP XML SCHEMA COLLECTION (Transact-SQL) Usuwa kompletną kolekcję schematów XML i wszystkie jej składniki.
Aby użyć kolekcji schematów XML i zawartych w niej schematów, należy najpierw utworzyć kolekcję i schematy przy użyciu instrukcji CREATE XML SCHEMA COLLECTION. Po utworzeniu kolekcji schematów można utworzyć zmienne i kolumny typu xml i skojarzyć z nimi kolekcję schematów. Po utworzeniu kolekcji schematów różne składniki schematu są przechowywane w metadanych. Możesz również użyć KOLEKCJI SCHEMATÓW ALTER XML, aby dodać więcej składników do istniejących schematów lub dodać nowe schematy do istniejącej kolekcji.
Aby usunąć kolekcję schematów, użyj instrukcji DROP XML SCHEMA COLLECTION. Spowoduje to usunięcie wszystkich schematów zawartych w kolekcji i usunięcie obiektu kolekcji. Przed usunięciem kolekcji schematów należy spełnić warunki opisane w sekcji DROP XML SCHEMA COLLECTION (Transact-SQL).
Omówienie składników schematu
W przypadku korzystania z instrukcji CREATE XML SCHEMA COLLECTION różne składniki schematu są importowane do bazy danych. Składniki schematu obejmują elementy schematu, atrybuty i definicje typów. Jeśli używasz instrukcji DROP XML SCHEMA COLLECTION, usuwasz kompletną kolekcję.
FUNKCJA CREATE XML SCHEMA COLLECTION zapisuje składniki schematu w różnych tabelach systemowych.
Rozważmy na przykład następujący schemat:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
W poprzednim schemacie przedstawiono różne typy składników, które mogą być przechowywane w bazie danych. Należą do nichSomeAttribute: , SomeTypeOrderTypeCustomerTypeCustomerOrderCustomerIDOrderIDOrderDateRequiredDatei .ShippedDate
Kategorie składników
Składniki schematu przechowywane w bazie danych należą do następujących kategorii:
PIERWIASTEK
ATRYBUT
TYPE (w przypadku typów prostych lub złożonych)
GRUPA ATRYBUTÓW
MODELGROUP
Przykład:
SomeAttributejest składnikiem ATTRIBUTE.SomeType,OrderTypeiCustomerTypesą składnikami TYPE.Customerjest składnikiem ELEMENT.
Podczas importowania schematu do bazy danych program SQL Server nie przechowuje samego schematu. Zamiast tego program SQL Server przechowuje różne poszczególne składniki. Oznacza to, że <tag Schemat> nie jest przechowywany, tylko składniki zdefiniowane w nim są zachowywane. Wszystkie elementy schematu nie są zachowywane. <Jeśli tag Schemat> zawiera atrybuty określające domyślne zachowanie jego składników, te atrybuty są przenoszone do składników schematu w ramach procesu importowania, jak pokazano w poniższej tabeli.
| Nazwa atrybutu | Zachowanie |
|---|---|
| attributeFormDefault | Atrybut formy zastosowany do wszystkich deklaracji atrybutów w schemacie, gdzie nie jest już obecny, a jego wartość jest ustawiana na wartość atrybutu attributeFormDefault. |
| elementFormDefault | Atrybut formy jest stosowany do wszystkich deklaracji elementów w schemacie tam, gdzie nie jest jeszcze obecny, a jego wartość ustawiana jest na atrybut elementFormDefault. |
| blokowanie domyślne | Atrybut block stosowany do wszystkich deklaracji elementów i definicji typów, gdzie nie jest jeszcze obecny, a jego wartość jest ustawiona na wartość atrybutu blockDefault. |
| finalDefault | Ostatni atrybut zastosowany do wszystkich deklaracji elementów i definicji typów, w których nie jest jeszcze obecny, a wartość jest ustawiona na wartość atrybutu finalDefault. |
| targetNamespace | Informacje o składnikach należących do docelowej przestrzeni nazw są przechowywane w metadanych. |
Uprawnienia do kolekcji schematów XML
Aby wykonać następujące czynności, musisz mieć niezbędne uprawnienia:
Tworzenie/ładowanie kolekcji schematów XML
Modyfikowanie kolekcji schematów XML
Usuwanie kolekcji schematów XML
Użyj kolekcji schematów XML, aby określić typ kolumn, zmiennych i parametrów typu xml, albo zastosuj je w ograniczeniach tabeli lub kolumny.
Model zabezpieczeń programu SQL Server umożliwia uprawnienie CONTROL dla każdego obiektu. Osoba lub podmiot, który otrzymuje to uprawnienie, uzyskuje wszystkie inne uprawnienia do obiektu. Właściciel obiektu ma również wszystkie uprawnienia do obiektu.
Właściciel i beneficjent uprawnienia CONTROL dla obiektu mogą przyznać dowolne uprawnienie do obiektu. Użytkownik, który nie jest właścicielem i nie ma uprawnień KONTROLA, nadal może przyznać uprawnienia do obiektu, gdy określono OPCJĘ PRZYDZIELENIE. Załóżmy na przykład, że użytkownik A ma uprawnienie REFERENCES do kolekcji schematów XML S z OPCJĄ NADAWANIA UPRAWNIEŃ, ale nie ma żadnych innych uprawnień do kolekcji S. Użytkownik A może udzielić użytkownikowi B uprawnienia REFERENCES do kolekcji schematów S.
Model zabezpieczeń umożliwia również uprawnienia do tworzenia i używania kolekcji schematów XML lub przenoszenia własności od jednego użytkownika do innego. W poniższych artykułach opisano uprawnienia do zbierania schematów XML.
Udzielanie uprawnień do kolekcji schematów XML
W tym artykule omówiono sposób udzielania uprawnień do tworzenia kolekcji schematów XML i sposobu udzielania uprawnień do obiektu kolekcji schematów XML.
Odwoływanie uprawnień do kolekcji schematów XML
W tym artykule omówiono sposób, w jaki można odwołać uprawnienia, aby zapobiec tworzeniu kolekcji schematów XML i jak odwołać uprawnienia do obiektu kolekcji schematów XML.
Odmowa uprawnień w kolekcji schematów XML
W tym artykule omówiono sposób odmowy uprawnień do tworzenia kolekcji schematów XML i odmowy uprawnień do obiektu kolekcji schematów XML.
Uzyskiwanie informacji o schematach XML i kolekcjach schematów
Kolekcje schematów XML są wyliczane w widoku wykazu, sys.xml_schema_collections. Kolekcja sys schematów XML jest definiowana przez system. Zawiera wstępnie zdefiniowane przestrzenie nazw, które mogą być używane we wszystkich kolekcjach schematów XML zdefiniowanych przez użytkownika bez konieczności ich jawnego ładowania. Ta lista zawiera przestrzenie nazw dla xml, , xs, xsifn, i xdt. Dwa inne widoki wykazu to sys.xml_schema_namespaces, które wyliczają wszystkie przestrzenie nazw w każdej kolekcji schematów XML i sys.xml_components, które wyliczają wszystkie składniki schematu XML w każdym schemacie XML.
Wbudowana funkcja XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, zwraca wystąpienie typu danych XML . To wystąpienie zawiera fragmenty schematu XML dla schematów, które znajdują się w kolekcji schematów XML, z wyjątkiem wstępnie zdefiniowanych schematów XML.
Zawartość kolekcji schematów XML można wyliczyć na następujące sposoby:
Pisanie zapytań Transact-SQL dotyczących odpowiednich widoków wykazu dla kolekcji schematów XML.
Użyj wbudowanej funkcji
XML_SCHEMA_NAMESPACE(). Metody typu danych XML można zastosować w danych wyjściowych tej funkcji. Nie można jednak modyfikować bazowych schematów XML.
Przedstawiono je w poniższych przykładach.
Przykłady
Wylicz przestrzenie nazw XML w kolekcji schematów XML
Użyj następującego zapytania dla kolekcji myCollectionschematów XML:
SELECT XSN.name
FROM sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE XSC.name = 'myCollection';
Wyliczanie zawartości kolekcji schematów XML
Poniższa instrukcja wylicza zawartość kolekcji myCollection schematów XML w schemacie dborelacyjnym .
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
Poszczególne schematy XML w kolekcji można uzyskać jako wystąpienia typu danych XML , określając docelową przestrzeń nazw jako trzeci argument do XML_SCHEMA_NAMESPACE(). Jest to pokazane w następującym przykładzie.
Wyprowadza określony schemat z kolekcji schematów XML
Poniższa instrukcja zwraca schemat XML z docelową przestrzenią nazw https://www.microsoft.com/was-books z kolekcji myCollection schematów XML w schemacie dborelacyjnym .
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
Tworzenie zapytań względem schematów XML
Możesz wykonywać zapytania dotyczące schematów XML załadowanych do kolekcji schematów XML w następujący sposób:
Pisanie zapytań Transact-SQL w widokach wykazu dla przestrzeni nazw schematu XML.
Utwórz tabelę zawierającą kolumnę typu danych XML do przechowywania schematów XML, a także załaduj je do systemu typów XML. Możesz wykonać zapytanie względem kolumny XML przy użyciu metod typu danych XML . Ponadto możesz utworzyć indeks XML w tej kolumnie. Jednak w przypadku tego podejścia aplikacja musi zachować spójność między schematami XML przechowywanymi w kolumnie XML a systemem typów XML. Jeśli na przykład upuścisz przestrzeń nazw schematu XML z systemu typów XML, musisz również usunąć ją z tabeli, aby zachować spójność.