Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Zoals beschreven in het artikel xml (Transact-SQL), biedt SQL Server systeemeigen opslag van XML-gegevens via het xml-gegevenstype . U kunt desgewenst XSD-schema's koppelen aan een variabele of een kolom van het XML-type via een XML-schemaverzameling. De XML-schemaverzameling slaat de geïmporteerde XML-schema's op en wordt vervolgens gebruikt om het volgende te doen:
XML-exemplaren valideren
Typ de XML-gegevens zoals deze zijn opgeslagen in de database
De XML-schemaverzameling is een metagegevensentiteit zoals een tabel in de database. U kunt ze maken, wijzigen en neerzetten. Schema's die zijn opgegeven in de instructie CREATE XML SCHEMA COLLECTION (Transact-SQL) worden automatisch geïmporteerd in het zojuist gemaakte XML-schemaverzamelingsobject. U kunt extra schema's of schemaonderdelen importeren in een bestaand verzamelingsobject in de database met behulp van de instructie ALTER XML SCHEMA COLLECTION (Transact-SQL).
Zoals beschreven in het artikel Typed versus Untyped XML, wordt de XML die is opgeslagen in een kolom of variabele waaraan een schema is gekoppeld, aangeduid als getypte XML, omdat het schema de benodigde gegevenstypen voor de exemplaargegevens levert. SQL Server gebruikt dit type informatie om gegevensopslag te optimaliseren.
De engine voor queryverwerking maakt ook gebruik van het schema voor het controleren van typen en het optimaliseren van query's en gegevenswijziging.
SQL Server gebruikt ook de bijbehorende XML-schemaverzameling, met getypte XML, om het XML-exemplaar te valideren. Als het XML-exemplaar voldoet aan het schema, kan de database het exemplaar opslaan in het systeem met de typegegevens. Anders wordt de instantie geweigerd.
U kunt de intrinsieke functie XML_SCHEMA_NAMESPACE gebruiken om de schemaverzameling op te halen die is opgeslagen in de database. Zie Een opgeslagen XML-schemaverzameling weergeven voor meer informatie.
U kunt de XML-schemaverzameling ook gebruiken om XML-variabelen, -parameters en -kolommen te typen.
DDL voor het beheren van schemaverzamelingen
U kunt XML-schemaverzamelingen maken in de database en deze koppelen aan variabelen en kolommen van het XML-type . Voor het beheren van schemaverzamelingen in de database biedt SQL Server de volgende DDL-instructies:
XML-SCHEMAVERZAMELING MAKEN (Transact-SQL) Hiermee importeert u schemaonderdelen in een database.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Hiermee wijzigt u de schemaonderdelen in een bestaande XML-schemaverzameling.
DROP XML SCHEMA COLLECTION (Transact-SQL) Hiermee verwijdert u een volledige XML-schemaverzameling en alle bijbehorende onderdelen.
Als u een XML-schemaverzameling en de schema's wilt gebruiken die het bevat, moet u eerst de verzameling en de schema's maken met de instructie CREATE XML SCHEMA COLLECTION. Nadat de schemaverzameling is gemaakt, kunt u vervolgens variabelen en kolommen van het XML-type maken en de schemaverzameling eraan koppelen. Nadat een schemaverzameling is gemaakt, worden verschillende schemaonderdelen opgeslagen in de metagegevens. U kunt ook de ALTER XML SCHEMA COLLECTION gebruiken om meer onderdelen toe te voegen aan de bestaande schema's of nieuwe schema's toe te voegen aan een bestaande verzameling.
Als u de schemaverzameling wilt verwijderen, gebruikt u de instructie DROP XML SCHEMA COLLECTION. Hiermee worden alle schema's verwijderd die zich in de verzameling bevinden en wordt het verzamelingsobject verwijderd. Voordat u een schemaverzameling kunt verwijderen, moeten aan de voorwaarden in DROP XML SCHEMA COLLECTION (Transact-SQL) worden voldaan.
Schemaonderdelen begrijpen
Wanneer u de instructie CREATE XML SCHEMA COLLECTION gebruikt, worden verschillende schemaonderdelen geïmporteerd in de database. Schemaonderdelen omvatten schema-elementen, kenmerken en typedefinities. Wanneer u de instructie DROP XML SCHEMA COLLECTION gebruikt, verwijdert u de volledige verzameling.
MET CREATE XML SCHEMA COLLECTION worden de schemaonderdelen opgeslagen in verschillende systeemtabellen.
Denk bijvoorbeeld aan het volgende schema:
<?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>
In het vorige schema ziet u de verschillende typen onderdelen die in de database kunnen worden opgeslagen. Deze omvatten SomeAttribute, , SomeType, OrderType, CustomerType, Customer, , OrderCustomerID, OrderID, , OrderDate, , en RequiredDateShippedDate.
Onderdeelcategorieën
De schemaonderdelen die in de database zijn opgeslagen, vallen in de volgende categorieën:
ELEMENT
ATTRIBUUT
TYPE (voor eenvoudige of complexe typen)
Attribuutgroep
MODELGROUP
Voorbeeld:
SomeAttributeis een KENMERK-onderdeel.SomeType,OrderTypeenCustomerTypezijn TYPE-onderdelen.Customeris een ELEMENT-onderdeel.
Wanneer u een schema in de database importeert, slaat SQL Server het schema zelf niet op. In plaats daarvan slaat SQL Server de verschillende afzonderlijke onderdelen op. Dat wil gezegd: de <schematag> wordt niet opgeslagen, alleen de onderdelen die erin zijn gedefinieerd, blijven behouden. Alle schema-elementen blijven niet behouden. Als de <schematag> kenmerken bevat die het standaardgedrag van de onderdelen opgeven, worden deze kenmerken tijdens het importproces naar de schemaonderdelen verplaatst, zoals wordt weergegeven in de volgende tabel.
| Naam van kenmerk | Gedrag |
|---|---|
| attributeFormDefault | Het formulierkenmerk dat wordt toegepast op alle declaraties van kenmerken in het schema waar deze nog niet aanwezig is en de waarde is ingesteld op de waarde van het kenmerk attributeFormDefault . |
| elementFormDefault | Het formulierkenmerk dat wordt toegepast op alle elementdeclaraties in het schema waar deze nog niet aanwezig is en de waarde is ingesteld op de waarde van het kenmerk elementFormDefault . |
| blockDefault | Het blokkenmerk dat wordt toegepast op alle elementdeclaraties en typedefinities waar deze nog niet aanwezig is en de waarde is ingesteld op de waarde van het kenmerk blockDefault . |
| finalDefault | Het uiteindelijke kenmerk dat wordt toegepast op alle elementdeclaraties en typedefinities waar deze nog niet aanwezig is en de waarde is ingesteld op de waarde van het finalDefault-kenmerk . |
| targetNamespace | Informatie over de onderdelen die deel uitmaken van de doelnaamruimte, wordt opgeslagen in de metagegevens. |
Machtigingen voor een XML-schemaverzameling
U moet over de benodigde machtigingen beschikken om het volgende te doen:
De XML-schemaverzameling maken/laden
De XML-schemaverzameling wijzigen
De XML-schemaverzameling verwijderen
Gebruik de verzameling XML-schema's om kolommen, variabelen en parameters te typen, of gebruik deze in tabel- of kolombeperkingen
Het SQL Server-beveiligingsmodel staat CONTROL-machtigingen toe voor elk object. De grantee van deze machtiging verkrijgt alle andere machtigingen voor het object. De eigenaar van het object heeft ook alle machtigingen voor het object.
De eigenaar en de ontvanger van de CONTROL-machtiging voor een object kunnen elke machtiging voor het object verlenen. Een gebruiker die niet de eigenaar is en geen CONTROL-machtiging heeft, kan nog steeds machtigingen verlenen voor een object wanneer WITH GRANT OPTION is opgegeven. Stel dat gebruiker A de autorisatie VERWIJZINGEN heeft voor XML-schemaverzameling S, met de optie OM DOOR TE GEVEN, maar geen andere autorisaties voor S. Gebruiker A kan gebruiker B de autorisatie VERWIJZINGEN verlenen voor schemaverzameling S.
Het beveiligingsmodel biedt ook machtigingen om XML-schemaverzamelingen te maken en te gebruiken of het eigendom van de ene gebruiker naar de andere over te dragen. In de volgende artikelen worden de machtigingen van de XML-schemaverzameling beschreven.
Machtigingen verlenen voor een XML-schemaverzameling
In dit artikel wordt beschreven hoe u machtigingen kunt verlenen voor het maken van een XML-schemaverzameling en hoe u machtigingen kunt verlenen voor een XML-schemaverzamelingsobject.
Machtigingen intrekken voor een XML-schemaverzameling
In dit artikel wordt beschreven hoe het intrekken van machtigingen kan worden gebruikt om te voorkomen dat een XML-schemaverzameling wordt gemaakt en hoe u machtigingen voor een XML-schemaverzamelingsobject kunt intrekken.
Machtigingen weigeren voor een XML-schemaverzameling
In dit artikel wordt beschreven hoe u machtigingen kunt weigeren voor het maken van een XML-schemaverzameling en het weigeren van machtigingen voor een XML-schemaverzamelingsobject.
Informatie verkrijgen over XML-schema's en schemaverzamelingen
XML-schemaverzamelingen worden opgesomd in de catalogusweergave, sys.xml_schema_collections. De XML-schemaverzameling sys wordt gedefinieerd door het systeem. Het bevat de vooraf gedefinieerde naamruimten die kunnen worden gebruikt in alle door de gebruiker gedefinieerde XML-schemaverzamelingen zonder ze expliciet te hoeven laden. Deze lijst bevat de naamruimten voor xml, xs, xsi, fn en xdt. Twee andere catalogusweergaven zijn sys.xml_schema_namespaces, waarmee alle naamruimten binnen elke XML-schemaverzameling worden opgesomd en sys.xml_components, waarmee alle ONDERDELEN van het XML-schema binnen elk XML-schema worden opgesomd.
De ingebouwde functie XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-urilevert een xml-gegevenstype-exemplaar op. Dit exemplaar bevat XML-schemafragmenten voor schema's die zijn opgenomen in een XML-schemaverzameling, met uitzondering van de vooraf gedefinieerde XML-schema's.
U kunt de inhoud van een XML-schemaverzameling op de volgende manieren opsommen:
Schrijf Transact-SQL query's over de juiste catalogusweergaven voor XML-schemaverzamelingen.
Gebruik de ingebouwde functie
XML_SCHEMA_NAMESPACE(). U kunt xml-gegevenstypemethoden toepassen op de uitvoer van deze functie. U kunt de onderliggende XML-schema's echter niet wijzigen.
Deze worden geïllustreerd in de volgende voorbeelden.
Voorbeelden
De XML-naamruimten in een XML-schemaverzameling opsommen
Gebruik de volgende query voor de XML-schemaverzameling myCollection:
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';
De inhoud van een XML-schemaverzameling opsommen
Met de volgende instructie wordt de inhoud van de XML-schemaverzameling myCollection binnen het relationele schema opgesomd. dbo
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
Afzonderlijke XML-schema's in de verzameling kunnen worden verkregen als exemplaren van het XML-gegevenstype door de doelnaamruimte op te geven als het derde argument voor XML_SCHEMA_NAMESPACE(). Dit wordt weergegeven in het volgende voorbeeld.
Een opgegeven schema uitvoeren vanuit een XML-schemaverzameling
Met de volgende instructie wordt het XML-schema met de pretend doelnaamruimte, https://www.microsoft.com/was-books uit de XML-schemaverzameling myCollection binnen het relationele schema dbo uitgevoerd.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
Opvraag XML-schema's
U kunt op de volgende manieren query's uitvoeren op XML-schemaschema's die u in XML-schemaverzamelingen hebt geladen:
Schrijf Transact-SQL query's voor catalogusweergaven voor XML-schemanaamruimten.
Maak een tabel met een kolom met een XML-gegevenstype om uw XML-schema's op te slaan en laad deze ook in het XML-typesysteem. U kunt een query uitvoeren op de XML-kolom met behulp van de methoden voor xml-gegevenstypen . U kunt ook een XML-index maken voor deze kolom. Met deze methode moet de toepassing echter consistentie behouden tussen de XML-schema's die zijn opgeslagen in de XML-kolom en het XML-typesysteem. Als u bijvoorbeeld de naamruimte van het XML-schema verwijdert uit het XML-typesysteem, moet u deze ook uit de tabel verwijderen om consistentie te behouden.