Sdílet prostřednictvím


Kolekce schémat XML (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Jak je popsáno v článku XML (Transact-SQL), SQL Server poskytuje nativní úložiště dat XML prostřednictvím datového typu XML . Volitelně můžete schémata XSD přidružit k proměnné nebo sloupci typu XML prostřednictvím kolekce schémat XML. Kolekce schémat XML ukládá importovaná schémata XML a pak se používá k provedení následujících kroků:

  • Ověření instancí XML

  • Zadejte data XML, protože jsou uložená v databázi.

Kolekce schématu XML je entita metadat jako tabulka v databázi. Můžete je vytvářet, upravovat a odstraňovat. Schémata zadaná v příkazu CREATE XML SCHEMA COLLECTION (Transact-SQL) se automaticky importují do nově vytvořeného objektu kolekce schémat XML. Do existujícího objektu kolekce v databázi můžete importovat další schémata nebo součásti schématu pomocí příkazu ALTER XML SCHEMA COLLECTION (Transact-SQL).

Jak je popsáno v článku Typed vs. Untyped XML, XML uložený ve sloupci nebo proměnné, ke kterému je schéma přidruženo, se označuje jako typ XML , protože schéma poskytuje nezbytné informace o datovém typu pro data instance. SQL Server používá tyto informace o typu k optimalizaci úložiště dat.

Modul pro zpracování dotazů také používá schéma ke kontrole typů a k optimalizaci dotazů a úprav dat.

SQL Server také používá přidruženou kolekci schémat XML s typem xml k ověření instance XML. Pokud instance XML vyhovuje schématu, databáze umožňuje, aby byla instance uložena v systému s informacemi o jejich typu. V opačném případě instanci odmítne.

Vnořenou funkci XML_SCHEMA_NAMESPACE můžete použít k načtení kolekce schématu uložené v databázi. Další informace naleznete v tématu Zobrazení uložené kolekce schémat XML.

Kolekci schémat XML můžete použít také k zadání proměnných, parametrů a sloupců XML.

DDL pro správu kolekcí schémat

V databázi můžete vytvářet kolekce schémat XML a přidružit je k proměnným a sloupcům typu XML . Ke správě kolekcí schémat v databázi poskytuje SQL Server následující příkazy DDL:

Chcete-li použít kolekci schémat XML a schémata, která obsahuje, musíte nejprve vytvořit kolekci a schémata pomocí příkazu CREATE XML SCHEMA COLLECTION. Po vytvoření kolekce schématu můžete vytvořit proměnné a sloupce typu XML a přidružit k nim kolekci schématu. Po vytvoření kolekce schématu se v metadatech ukládají různé součásti schématu. Kolekci ALTER XML SCHEMA COLLECTION můžete také použít k přidání dalších komponent do existujících schémat nebo přidání nových schémat do existující kolekce.

Chcete-li odstranit kolekci schématu, použijte příkaz DROP XML SCHEMA COLLECTION. Tím se zahodí všechna schémata obsažená v kolekci a odebere se objekt kolekce. Než budete moct kolekci schématu odstranit, musí být splněny podmínky popsané v drop XML SCHEMA COLLECTION (Transact-SQL).

Porozumět komponentám schématu

Při použití příkazu CREATE XML SCHEMA COLLECTION se do databáze importují různé součásti schématu. Součástí schématu jsou prvky schématu, atributy a definice typů. Když použijete příkaz DROP XML SCHEMA COLLECTION, odeberete úplnou kolekci.

FUNKCE CREATE XML SCHEMA COLLECTION ukládá součásti schématu do různých systémových tabulek.

Představte si například následující schéma:

<?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>

Předchozí schéma ukazuje různé typy komponent, které lze uložit v databázi. Patří mezi ně SomeAttribute, SomeType, OrderType, CustomerType, Customer, OrderCustomerIDOrderIDOrderDate, RequiredDate, a .ShippedDate

Kategorie komponent

Součásti schématu uložené v databázi spadají do následujících kategorií:

  • ELEMENT

  • ATTRIBUT

  • TYPE (pro jednoduché nebo složité typy)

  • SKUPINA ATRIBUTŮ

  • MODELGROUP

Například:

  • SomeAttribute je komponenta ATTRIBUTE.

  • SomeTypea OrderTypeCustomerType jsou to komponenty TYPE.

  • Customer je komponenta ELEMENT.

Při importu schématu do databáze SQL Server neukládá samotné schéma. Místo toho SQL Server ukládá různé jednotlivé komponenty. To znamená, že značka Schémata <> není uložena, jsou zachovány pouze komponenty, které jsou definovány v něm. Všechny prvky schématu se nezachovají. <Pokud značka Schema> obsahuje atributy, které určují výchozí chování jeho součástí, tyto atributy se během procesu importu přesunou do komponent schématu, jak je znázorněno v následující tabulce.

Název atributu Chování
attributeFormDefault Atribut form použitý ve všech deklaracích atributů ve schématu, kde ještě není přítomen, a její hodnota je nastavena na hodnotu atributu attributeFormDefault.
elementFormDefault Atribut form použitý u všech deklarací elementů ve schématu, kde ještě není přítomen, a jeho hodnota je nastavena na hodnotu atribuelementFormDefault.
blockDefault Atribut block je použit u všech deklarací elementů a definic typů, kde ještě není přítomen, a hodnota je nastavena na hodnotu atributu blockDefault.
finalDefault Poslední atribut použitý u všech deklarací elementů a definic typů, kde ještě není k dispozici, a hodnota je nastavena na hodnotu finalDefault atributu.
targetNamespace Informace o komponentách, které patří do cílového oboru názvů, jsou uloženy v metadatech.

Oprávnění ke kolekci schémat XML

K provedení následujících kroků musíte mít potřebná oprávnění:

  • Vytvoření nebo načtení kolekce schémat XML

  • Úprava kolekce schémat XML

  • Vypusťte kolekci schémat XML.

  • Použijte kolekci schémat XML pro zadání xml typu sloupců, proměnných a parametrů nebo ji použijte v omezeních tabulky nebo sloupce.

Model zabezpečení SQL Serveru umožňuje oprávnění CONTROL ke každému objektu. Příjemce tohoto oprávnění získá všechna ostatní oprávnění k objektu. Vlastník objektu má také všechna oprávnění k objektu.

Vlastník a příjemce oprávnění CONTROL u objektu mohou udělit jakékoli oprávnění k objektu. Uživatel, který není vlastníkem a nemá oprávnění CONTROL, může udělit oprávnění k objektu, pokud je specifikována MOŽNOST UDĚLENÍ OPRÁVNĚNÍ. Předpokládejme například, že uživatel A má oprávnění REFERENCES pro kolekci schémat XML S prostřednictvím možnosti GRANT OPTION, ale žádná další oprávnění na S. Uživatel A by mohl udělit uživateli B oprávnění REFERENCES pro kolekci schémat S.

Model zabezpečení také umožňuje oprávnění vytvářet a používat kolekce schémat XML nebo přenášet vlastnictví od jednoho uživatele do jiného. Následující články popisují oprávnění kolekce schémat XML.

Získání informací o schématech XML a kolekcích schémat

Kolekce schémat XML jsou znázorněny v zobrazení katalogu sys.xml_schema_collections. Kolekce sys schémat XML je definována systémem. Obsahuje předdefinované obory názvů, které lze použít ve všech uživatelsky definovaných kolekcích schémat XML, aniž byste je museli načíst explicitně. Tento seznam obsahuje obory názvů pro xml, xs, xsi, fn a xdt. Dvě další zobrazení katalogu jsou sys.xml_schema_namespaces, která vyčísluje všechny obory názvů v rámci každé kolekce schématu XML a sys.xml_components, která vytvoří výčet všech komponent schématu XML v rámci každého schématu XML.

Integrovaná funkce XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uriposkytuje instanci datového typu XML . Tato instance obsahuje fragmenty schématu XML pro schémata obsažená v kolekci schémat XML s výjimkou předdefinovaných schémat XML.

Obsah kolekce schématu XML můžete vypsat následujícími způsoby:

  • Napište Transact-SQL dotazy na příslušná zobrazení katalogu pro kolekce schémat XML.

  • Použijte předdefinované funkce XML_SCHEMA_NAMESPACE(). Metody datového typu XML můžete použít na výstupu této funkce. Základní schémata XML ale nemůžete upravit.

Tyto příklady jsou znázorněny v následujících příkladech.

Examples

Vyjmenovat obory názvů XML v kolekci schémat XML

Pro kolekci myCollectionschémat XML použijte následující dotaz:

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';

Vytvoření výčtu obsahu kolekce schémat XML

Následující příkaz vypíše obsah kolekce myCollection schématu XML v rámci relačního schématu, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');

Jednotlivá schémata XML v kolekci lze získat jako instance datového typu XML zadáním cílového oboru názvů jako třetí argument pro XML_SCHEMA_NAMESPACE(). To je ukázáno v následujícím příkladu.

Výstup zadaného schématu z kolekce schémat XML

Následující příkaz vypíše schéma XML s fiktivním cílovým oborem názvů https://www.microsoft.com/was-books z kolekce schémat XML v rámci relačního schématu, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')

Dotazování schémat XML

Schémata XML, která jste načetli do kolekcí schémat XML, můžete dotazovat následujícími způsoby:

  • Zapište Transact-SQL dotazy na zobrazení katalogu pro obory názvů schématu XML.

  • Vytvořte tabulku obsahující sloupec datového typu XML pro uložení schémat XML a také je načtěte do systému typů XML. Sloupec XML můžete dotazovat pomocí metod datového typu XML . V tomto sloupci můžete také vytvořit index XML. Při tomto přístupu však musí aplikace udržovat konzistenci mezi schématy XML uloženými ve sloupci XML a systémem typů XML. Pokud například přehodíte obor názvů schématu XML ze systému typů XML, musíte ho také odstranit z tabulky, aby se zachovala konzistence.

Viz také