Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL ServerAzure
SQL Managed Instance
Přidává nové komponenty schématu do stávající kolekce XML schémat.
Syntax
ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'
Arguments
relational_schema
Identifikuje název relačního schématu. Pokud není zadáno, předpokládá se výchozí relační schéma.
sql_identifier
Je SQL identifikátor pro kolekci XML schématu.
'Komponenta schématu'
Je složka schématu pro vložení.
Remarks
Použijte je ALTER XML SCHEMA COLLECTION k přidání nových XML schémat, jejichž jmenné prostory nejsou již v kolekci XML schémat, nebo k přidání nových komponent do stávajících jmenných prostorů v kolekci.
Následující příklad přidává nový <prvek> do existujícího jmenného prostoru https://MySchema/test_xml_schema v kolekci MyColl.
-- First create an XML schema collection.
CREATE XML SCHEMA COLLECTION MyColl AS '
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://MySchema/test_xml_schema">
<element name="root" type="string"/>
</schema>'
-- Modify the collection.
ALTER XML SCHEMA COLLECTION MyColl ADD '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://MySchema/test_xml_schema">
<element name="anotherElement" type="byte"/>
</schema>';
ALTER XML SCHEMA přidává prvek <anotherElement> do dříve definovaného jmenného prostoru https://MySchema/test_xml_schema.
Všimněte si, že pokud některé komponenty, které chcete přidat do kolekce, odkazují na komponenty, které už jsou ve stejné kolekci, musíte použít <import namespace="referenced_component_namespace" />. Není však platné používat aktuální jmenný prostor schématu v <xsd:import>, a proto jsou komponenty ze stejného cílového jmenného prostoru jako současný jmenný prostor schématu automaticky importovány.
Pro odstranění kolekcí použijte DROP XML SCHEMA COLLECTION (Transact-SQL).
Pokud kolekce schémat již obsahuje laxní validační žolík nebo prvek typu xs:anyType, přidání nového globálního prvku, typu nebo atributu do kolekce schématu způsobí opětovnou validaci všech uložených dat, která jsou omezena kolekcí schématu.
Permissions
Ke změně je XML SCHEMA COLLECTION potřeba ALTER povolení ke sbírce.
Examples
A. Vytváření XML schématu v databázi
Následující příklad vytvoří kolekci ManuInstructionsSchemaCollectionschémat XML . Kolekce má pouze jeden obor názvů schématu.
-- Create a sample database in which to load the XML schema collection.
CREATE DATABASE SampleDB;
GO
USE SampleDB;
GO
CREATE XML SCHEMA COLLECTION ManuInstructionsSchemaCollection AS
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
xmlns ="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:complexType name="StepType" mixed="true" >
<xsd:choice minOccurs="0" maxOccurs="unbounded" >
<xsd:element name="tool" type="xsd:string" />
<xsd:element name="material" type="xsd:string" />
<xsd:element name="blueprint" type="xsd:string" />
<xsd:element name="specs" type="xsd:string" />
<xsd:element name="diag" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Location" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="step" type="StepType" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="LocationID" type="xsd:integer" use="required"/>
<xsd:attribute name="SetupHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="MachineHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LaborHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LotSize" type="xsd:decimal" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>' ;
GO
-- Verify - list of collections in the database.
SELECT *
FROM sys.xml_schema_collections;
-- Verify - list of namespaces in the database.
SELECT name
FROM sys.xml_schema_namespaces;
-- Use it. Create a typed xml variable. Note the collection name
-- that is specified.
DECLARE @x xml (ManuInstructionsSchemaCollection);
GO
--Or create a typed xml column.
CREATE TABLE T (
i int primary key,
x xml (ManuInstructionsSchemaCollection));
GO
-- Clean up.
DROP TABLE T;
GO
DROP XML SCHEMA COLLECTION ManuInstructionsSchemaCollection;
Go
USE master;
GO
DROP DATABASE SampleDB;
Případně můžete kolekci schémat přiřadit k proměnné a zadat proměnnou v CREATE XML SCHEMA COLLECTION příkazu následujícím způsobem:
DECLARE @MySchemaCollection nvarchar(max);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION AS @MySchemaCollection;
Proměnná v příkladu je typu nvarchar(max) . Proměnná může být také typu xml dat, v takovém případě je implicitně převedena na řetězec.
Další informace naleznete v tématu Zobrazení uložené kolekce schémat XML.
Sbírky schémat můžete ukládat do sloupce typu xml . V tomto případě vytvořte kolekci schémat XML provedením následujících kroků:
Sbírku schémat z tohoto sloupce načtěte pomocí příkazu SELECT a přiřadíte ji proměnné typu xml nebo typu varchar .
Zadejte název proměnné v CREATE XML SCHEMA COLLECTION příkazu.
Ukládá CREATE XML SCHEMA COLLECTION pouze ty komponenty schématu, kterým SQL Server rozumí; vše v XML schématu není uloženo v databázi. Pokud tedy chcete, aby se sbírka XML schémat vrátila přesně tak, jak byla poskytnuta, doporučujeme uložit svá XML schémata do sloupce databáze nebo jiné složky na vašem počítači.
B. Specifikace více jmenných prostorů schémat v kolekci schémat
Při vytváření kolekce schémat XML můžete zadat více schémat XML. Příklad:
CREATE XML SCHEMA COLLECTION N'
<xsd:schema>....</xsd:schema>
<xsd:schema>...</xsd:schema>';
Následující příklad vytvoří kolekci ProductDescriptionSchemaCollection schématu XML, která obsahuje dva obory názvů schématu XML.
CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="Warranty" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="WarrantyPeriod" type="xsd:string" />
<xsd:element name="Description" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xs:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
elementFormDefault="qualified"
xmlns:mstns="https://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >
<xs:import
namespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" />
<xs:element name="ProductDescription" type="ProductDescription" />
<xs:complexType name="ProductDescription">
<xs:sequence>
<xs:element name="Summary" type="Summary" minOccurs="0" />
</xs:sequence>
<xs:attribute name="ProductModelID" type="xs:string" />
<xs:attribute name="ProductModelName" type="xs:string" />
</xs:complexType>
<xs:complexType name="Summary" mixed="true" >
<xs:sequence>
<xs:any processContents="skip" namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>'
;
GO
-- Clean up
DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollection;
GO
C. Import schématu, které nespecifikuje cílový jmenný prostor
Pokud je schéma, které neobsahuje atribut targetNamespace, importováno do kolekce, jeho komponenty jsou přiřazeny k prázdnému jmennému prostoru řetězce, jak je ukázáno v následujícím příkladu. Všimněte si, že nepřiřazení jednoho nebo více schémat importovaných do kolekce vede k tomu, že více komponent schématu (potenciálně nesouvisejících) je přiřazeno k výchozímu prázdnému jmennému prostoru řetězců.
-- Create a collection that contains a schema with no target namespace.
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>';
GO
-- query will return the names of all the collections that
--contain a schema with no target namespace
SELECT sys.xml_schema_collections.name
FROM sys.xml_schema_collections
JOIN sys.xml_schema_namespaces
ON sys.xml_schema_collections.xml_collection_id =
sys.xml_schema_namespaces.xml_collection_id
WHERE sys.xml_schema_namespaces.name='';
Viz také
CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL)
Porovnání typovaného XML s nezatypovaným XML
Požadavky a omezení pro kolekce schémat XML na serveru