Como mapear SQL para XML e XML para SQL

Para trocar dados entre bancos de dados SQL e documentos XML, os vários elementos de uma base de dados SQL deve ser traduzível em elementos equivalentes de um documento XML, e, claro, vice-versa.

Os conjuntos de caracteres

Em SQL, os conjuntos de caracteres suportados dependem da aplicação que você está usando. Isto significa que do IBM DB2 pode suportar conjuntos de caracteres que não são suportados pelo SQL Server da Microsoft. Se você usar um conjunto de caracteres menos comuns, migrar seu banco de dados e aplicação de uma plataforma RDBMS para outro pode ser difícil.

XML suporta apenas um, Unicode. Isso é uma coisa boa do ponto de vista da troca de dados entre qualquer implementação SQL e XML. Todos os fornecedores de RDBMS tem que definir um mapeamento entre as cadeias de cada um dos seus conjuntos de caracteres e Unicode, bem como um mapeamento inverso de Unicode para cada um dos seus conjuntos de caracteres.

Felizmente, XML também não oferecem suporte a vários conjuntos de caracteres. Se assim fosse, os fornecedores teria um problema de muitos-para-muitos, que exigiria mais alguns mapeamentos e mapeamentos reverter para resolver.

identificadores

Caracteres que são legais em SQL, mas ilegal em XML devem ser mapeados para algo legal antes que eles possam se tornar parte de um documento XML. SQL suporta identificadores delimitados. Isto significa que personagens estranhos, como%, $, e são legais, desde que eles estão fechados dentro de aspas duplas. Tais personagens não são legais em XML.

Além disso, nomes XML que começam com os caracteres XML em qualquer combinação dos casos são reservados e, portanto, não pode ser usado impune. Se você tiver quaisquer identificadores SQL que começam com as letras, você tem que mudá-los.

Na passagem de SQL para XML, todos os identificadores SQL são convertidos para Unicode. A partir daí, todos os identificadores SQL que também são nomes XML legais é deixado inalterado. caracteres identificador SQL que são nomes XML não legais são substituídas por um código hexadecimal que ou assume a forma # 147 _xNNNN_ # 148- ou # 147 _xNNNNNNNN_ # 148-, Onde N representa um dígito hexadecimal maiúsculas.

Por exemplo, o sublinhado será representado por # 147 _x005F_ # 148-. O cólon será representado por # 147 _x003A_ # 148-. Essas representações são os códigos para os caracteres Unicode para o sublinhado e cólon. O caso em que um identificador de SQL começa com os caracteres X, m, e eu é tratado por prefixar todos os casos com um código na forma # 147 _xFFFF_ # 148-.

Conversão de XML para SQL é muito mais fácil. Tudo que você precisa fazer é verificar os caracteres de um nome de XML para uma seqüência de # 147 _xNNNN_ # 148- ou # 147 _xNNNNNNNN_ # 148-. Sempre que você encontrar um tal seqüência, substitua-o com o personagem que o Unicode corresponde. Se um nome XML começa com os caracteres # 147 _xFFFF_ # 148-, ignore-os.

Tipos de dados

O padrão SQL especifica que um tipo de dados SQL deve ser mapeado para o tipo de dados de esquema XML possível mais próximo. a designação mais próximo possível significa que todos os valores permitidos pelo tipo SQL será permitido pelo tipo de esquema XML, e o menor número de possíveis valores não permitidos pelo tipo SQL será permitido pelo tipo de esquema XML.

facetas XML, tais como maxInclusive e minInclusive, pode restringir os valores permitidos pelo tipo de esquema XML para os valores permitidos pelo tipo SQL correspondente.

Por exemplo, se o tipo de dados SQL restringe valores da INTEIRO escreva para o intervalo -2157483648, em XML o maxInclusive valor pode ser definido como 2157483647, ea minInclusive valor pode ser definido como -2157483648. Aqui está um exemplo de um mapeamento tais:

tabelas

Você pode mapear uma tabela para um documento XML. Da mesma forma, você pode mapear todas as tabelas em um esquema ou todas as tabelas em um catálogo. Privilégios são mantidos pelo mapeamento. Uma pessoa que tem a SELECIONAR privilégio em apenas algumas colunas da tabela será capaz de mapear apenas as colunas para o documento XML.

O mapeamento realmente produz dois documentos, um que contém os dados na tabela e outra que contém o esquema XML que descreve o primeiro documento. Aqui está um exemplo do mapeamento de uma tabela SQL para um documento contendo dados XML:

AbeAbelsonSpringfield714555-1111ContacolherãoDecatur714555-2222...

O elemento raiz do documento foi dado o nome da tabela. Cada linha da tabela está contido dentro de um elemento, e cada elemento de linha contém uma sequência de elementos de coluna, cada um com o nome da coluna correspondente na tabela de origem. Cada elemento de coluna contém um valor de dados.

Os valores nulos

Como os dados SQL pode incluir valores nulos, você deve decidir como para representá-los em um documento XML. Você pode representar um valor nulo ou como nulo ou ausente. Se você escolher a opção zero, em seguida, o atributo xsi: nil = # 147-true # 148- marca os elementos da coluna que representam valores nulos. Ele pode ser usado da seguinte forma:

Contacolherão714555-2222

Se você escolher a opção ausente, você pode implementá-lo da seguinte forma:

Contacolherão714555-2222

Neste caso, a linha que contém o valor nulo está ausente. Não há nenhuma referência a ele.

Como gerar o esquema XML

Ao mapear de SQL para XML, o primeiro documento gerado é a que contém os dados. O segundo contém as informações de esquema. Considere o esquema para o documento CLIENTE:

Este esquema é apropriada se for utilizada a abordagem nulo para valores nulos manipulação. A abordagem ausente exige uma definição de elemento ligeiramente diferente. Por exemplo:

menu