Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Conforme descrito no tópico, xml (Transact-SQL), o SQL Server fornece armazenamento nativo de dados XML por meio do xml tipo de dados. Opcionalmente, você pode associar esquemas XSD a uma variável ou a uma coluna do tipo xml por meio de uma coleção de esquemas XML. A coleção de esquemas XML armazena os esquemas XML importados e, em seguida, é usada para fazer o seguinte:
Validar instâncias XML
Digite os dados XML como eles são armazenados no banco de dados
Observe que a coleção de esquemas XML é uma entidade de metadados como uma tabela no banco de dados. Você pode criá-los, modificá-los e soltá-los. Esquemas especificados em uma instrução CREATE XML SCHEMA COLLECTION (Transact-SQL) são automaticamente importados para o objeto de coleção de esquema XML recém-criado. Você pode importar esquemas adicionais ou componentes de esquema para um objeto de coleção existente no banco de dados usando a instrução ALTER XML SCHEMA COLLECTION (Transact-SQL).
Conforme descrito no tópico, Typed vs. Untyped XML, o XML armazenado em uma coluna ou variável à qual um esquema está associado é chamado de XML digitado , pois o esquema fornece as informações de tipo de dados necessárias para os dados da instância. O SQL Server usa essas informações de tipo para otimizar o armazenamento de dados.
O mecanismo de processamento de consulta também usa o esquema para verificação de tipos e para otimizar consultas e modificação de dados.
Além disso, o SQL Server usa a coleção de esquemas XML associada, no caso de digitado xml, para validar a instância XML. Se a instância XML estiver em conformidade com o esquema, o banco de dados permitirá que a instância seja armazenada no sistema com suas informações de tipo. Caso contrário, ele rejeitará a instância.
Você pode usar a função intrínseca XML_SCHEMA_NAMESPACE para recuperar a coleção de esquemas armazenada no banco de dados. Para obter mais informações, consulte Exibir uma coleção de esquemas XML armazenada.
Você também pode usar a coleção de esquemas XML para digitar variáveis XML, parâmetros e colunas.
DDL para gerenciar coleções de esquemas
Você pode criar coleções de esquema XML no banco de dados e associá-las a variáveis e colunas de xml tipo. Para gerenciar coleções de esquemas no banco de dados, o SQL Server fornece as seguintes instruções DDL:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Importa componentes de esquema para um banco de dados.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifica os componentes de esquema em uma coleção de esquemas XML existente.
DROP XML SCHEMA COLLECTION (Transact-SQL) Exclui uma coleção de esquemas XML completa e todos os seus componentes.
Para usar uma coleção de esquemas XML e os esquemas que ela contém, primeiro você deve criar a coleção e os esquemas usando a instrução CREATE XML SCHEMA COLLECTION. Depois que a coleção de esquemas for criada, você poderá criar variáveis e colunas do xml tipo e associar a coleção de esquemas a elas. Observe que, depois que uma coleção de esquemas é criada, vários componentes de esquema são armazenados nos metadados. Você também pode usar a ALTER XML SCHEMA COLLECTION para adicionar mais componentes aos esquemas existentes ou adicionar novos esquemas a uma coleção existente.
Para remover a coleção de esquemas, use a instrução DROP XML SCHEMA COLLECTION. Isso descarta todos os esquemas contidos na coleção e remove o objeto da coleção. Observe que, antes de remover uma coleção de esquemas, as condições descritas em DROP XML SCHEMA COLLECTION (Transact-SQL)devem ser atendidas.
Noções básicas sobre componentes de esquema
Quando você usa a instrução CREATE XML SCHEMA COLLECTION, vários componentes de esquema são importados para o banco de dados. Os componentes de esquema incluem elementos de esquema, atributos e definições de tipo. Ao usar a instrução DROP XML SCHEMA COLLECTION, você remove a coleção completa.
CREATE XML SCHEMA COLLECTION salva os componentes do esquema em várias tabelas do sistema.
Por exemplo, considere o seguinte esquema:
<?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>
O esquema anterior mostra os diferentes tipos de componentes que podem ser armazenados no banco de dados. Estes incluem SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate e ShippedDate.
Categorias de componente
Os componentes de esquema armazenados no banco de dados se enquadram nas seguintes categorias:
ELEMENTO
ATRIBUTO
TYPE (para tipos simples ou complexos)
Grupo de Atributos
GRUPO MODELO
Por exemplo:
SomeAttribute é um componente ATTRIBUTE.
SomeType, OrderType e CustomerType são componentes TYPE.
O cliente é um componente ELEMENT.
Quando você importa um esquema para o banco de dados, o SQL Server não armazena o esquema em si. Em vez disso, o SQL Server armazena os vários componentes individuais. Ou seja, a <marca de esquema> não é armazenada, apenas os componentes definidos dentro dela são preservados. Todos os elementos de esquema não são preservados. Se a <marca schema> contiver atributos que especificam o comportamento padrão de seus componentes, esses atributos serão movidos para os componentes de esquema dentro dele durante o processo de importação, conforme mostrado na tabela a seguir.
| Nome do atributo | Comportamento |
|---|---|
| attributeFormDefault | O atributo de formulário aplicado a todas as declarações de atributo no esquema em que ele ainda não está presente e o valor é definido como o valor do atributo AttributeFormDefault . |
| elementFormDefault | O atributo form aplicado a todas as declarações de elemento no esquema, onde ainda não está presente, tem o valor definido de acordo com o valor do atributo elementFormDefault. |
| blockDefault | O atributo block é aplicado a todas as declarações de elemento e definições de tipo onde não está presente, e o valor é definido como o valor do atributo blockDefault. |
| finalDefault | O atributo final aplicado a todas as declarações de elemento e definições de tipo em que ele ainda não está presente e o valor é definido como o valor do atributo finalDefault . |
| targetNamespace | Informações sobre os componentes que pertencem ao namespace de destino são armazenadas nos metadados. |
Permissões em uma coleção de esquemaS XML
Você deve ter as permissões necessárias para fazer o seguinte:
Criar/carregar a coleção de esquemas XML
Modificar a coleção de esquemas XML
Remover a coleção de esquemas XML
Use a coleção de esquemas XML para definir o tipo das
xmlcolunas, variáveis e parâmetros, ou utilizá-la em restrições de tabela ou coluna.
O modelo de segurança do SQL Server permite a permissão CONTROL em cada objeto. O usuário autorizado dessa permissão obtém todas as outras permissões no objeto. O proprietário do objeto também tem todas as permissões no objeto.
O proprietário e o concessionário da permissão CONTROL sobre um objeto podem conceder qualquer permissão no objeto. Um usuário que não é o proprietário e não tem permissão CONTROL ainda pode conceder permissão em um objeto quando "WITH GRANT OPTION" é especificado. Por exemplo, suponha que o Usuário A tenha permissão de REFERÊNCIAS na coleção de esquemas XML S, COM OPÇÃO DE CONCESSÃO, mas não possua nenhuma outra permissão na coleção S. O Usuário A poderia conceder a permissão de REFERÊNCIAS ao Usuário B na coleção de esquemas S.
O modelo de segurança também permite permissões para criar e usar coleções de esquema XML ou transferir a propriedade de um usuário para outro. Os tópicos a seguir descrevem as permissões de coleção de esquemas XML.
Conceder permissões em uma coleção de esquemaS XML
Este tópico discute como conceder permissões para criar uma coleção de esquemas XML e como conceder permissões em um objeto de coleção de esquemaS XML.
Revogar permissões em uma coleção de esquemas XML
Este tópico discute como a revogação de permissões pode ser usada para impedir a criação de uma coleção de esquemas XML e como revogar permissões em um objeto de coleção de esquemaS XML.
Negar permissões em uma coleção de esquemas XML
Este tópico discute como negar permissões para criar uma coleção de esquemas XML e negar permissão em um objeto de coleção de esquemaS XML.
Obtendo informações sobre esquemas XML e coleções de esquemas
Coleções de esquema XML são enumeradas na exibição de catálogo, sys.xml_schema_collections. A coleção de esquemas XML "sys" é definida pelo sistema. Ele contém os namespaces predefinidos que podem ser usados em todas as coleções de esquema XML definidas pelo usuário sem precisar carregá-los explicitamente. Esta lista contém os namespaces para xml, xs, xsi, fn e xdt. Duas outras exibições de catálogo são sys.xml_schema_namespaces, que enumera todos os namespaces em cada coleção de esquemaS XML e sys.xml_components, que enumera todos os componentes de esquema XML em cada esquema XML.
A função interna XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, produz uma xml instância de tipo de dados. Essa instância contém fragmentos de esquema XML para esquemas contidos em uma coleção de esquemas XML, exceto os esquemas XML predefinidos.
Você pode enumerar o conteúdo de uma coleção de esquemas XML das seguintes maneiras:
Escreva consultas Transact-SQL nas exibições de catálogo apropriadas para coleções de esquemas XML.
Use a função interna XML_SCHEMA_NAMESPACE(). Você pode aplicar
xmlmétodos de tipo de dados na saída dessa função. No entanto, você não pode modificar os esquemas XML subjacentes.
Eles são ilustrados nos exemplos a seguir.
Exemplo: enumerar os namespaces XML em uma coleção de esquemas XML
Use a seguinte consulta para a coleção de esquemaS XML "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'
Exemplo: enumerar o conteúdo de uma coleção de esquemas XML
A instrução a seguir enumera o conteúdo da coleção de esquemas XML "myCollection" dentro do esquema relacional, dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')
Esquemas XML individuais dentro da coleção podem ser obtidos como xml instâncias de tipo de dados especificando o namespace de destino como o terceiro argumento para XML_SCHEMA_NAMESPACE(). Isso é mostrado no exemplo a seguir.
Exemplo: saída de um esquema especificado de uma coleção de esquemas XML
A instrução a seguir gera o esquema XML com o namespace de destino "https://www.microsoft.com/books" da coleção de esquemas XML "myCollection" dentro do esquema relacional, dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/books')
Consultando esquemas XML
Você pode consultar esquemas XML carregados em coleções de esquema XML das seguintes maneiras:
Escreva Transact-SQL consultas em exibições de catálogo para namespaces de esquema XML.
Crie uma tabela que contenha uma
xmlcoluna de tipo de dados para armazenar seus esquemas XML e também carregá-los no sistema de tipos XML. Você pode consultar a coluna XML usando os métodos dexmltipo de dados. Além disso, você pode criar um índice XML nesta coluna. No entanto, com essa abordagem, o aplicativo deve manter a consistência entre os esquemas XML armazenados na coluna XML e o sistema de tipos XML. Por exemplo, se você remover o namespace do esquema XML do sistema de tipos XML, também precisará removê-lo da tabela para preservar a consistência.
Consulte Também
Exibir uma coleção de esquemas XML armazenada
Pré-processar um esquema para mesclar esquemas incluídos
Requisitos e limitações para coleções de esquema XML no servidor