Condividi tramite


Visualizzazione di una raccolta di schemi XML archiviata

Dopo aver importato un insieme di schemi XML tramite l'istruzione CREATE XML SCHEMA COLLECTION, i componenti di schema vengono archiviati nei metadati. Per ricostruire l'insieme di schemi XML, è possibile utilizzare la funzione intrinseca xml_schema_namespace. Questa funzione restituisce un'istanza del tipo di dati xml.

Ad esempio, la query seguente restituisce un insieme di schemi XML (ProductDescriptionSchemaCollection) dallo schema relazionale di produzione nel database AdventureWorks2008R2.

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection')
GO

Se si desidera visualizzare solo uno schema dell'insieme di schemi XML, è possibile specificare una query XQuery sul risultato di tipo xml restituito dalla funzione xml_schema_namespace.

SELECT xml_schema_namespace(N'RelationalSchemaName',N'XmlSchemaCollectionName').query('
/xs:schema[@targetNamespace="TargetNameSpace"]
')
GO

Ad esempio, la query seguente recupera le informazioni dello schema XML relativo alla manutenzione e alla garanzia dei prodotti dall'insieme di schemi ProductDescriptionSchemaCollection.

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection').query('
/xs:schema[@targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"]
')
GO

Per recuperare uno schema specifico dall'insieme, è inoltre possibile passare lo spazio dei nomi di destinazione facoltativo come terzo parametro della funzione xml_schema_namespace, come illustrato nella query seguente:

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection', N'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain')
GO

Quando si crea un insieme di schemi XML nel database tramite l'istruzione CREATE XML SCHEMA COLLECTION, i componenti di schema vengono archiviati nei metadati. Si noti che vengono archiviati solo i componenti di schema riconosciuti da SQL Server. Non vengono archiviati commenti, annotazioni o attributi non XSD. Dal punto di vista funzionale, pertanto, lo schema ricostruito dalla funzione xml_schema_namespace è equivalente allo schema originale, ma l'aspetto non sarà necessariamente identico. Ad esempio, non verranno visualizzati gli stessi prefissi dello schema originale. Lo schema restituito dalla funzione xml_schema_namespace utilizza t come prefisso per lo spazio dei nomi di destinazione e ns1, ns2 e così via per gli altri spazi dei nomi.

Se si desidera mantenere una copia identica degli schemi XML, è consigliabile salvarli in un file o in una tabella di database all'interno di una colonna di tipo xml.

La vista del catalogo sys.xml_schema_collections restituisce inoltre informazioni sugli insiemi di schemi XML, che includono il nome, la data di creazione e il proprietario dell'insieme.