Seção 4: Desenvolvedores

Q 4.8: Como faço para inserir XML dentro ou fora do meu banco de dados?

Pergunte ao fabricante do seu banco de dados

Quase todos os sistemas de gerenciamento de banco de dados agora fornecem módulos XML de importação e exportação para conectar aplicativos XML com bancos de dados.

Em alguns casos triviais, haverá uma correspondência de 1:1 entre nomes de campo na tabela de banco de dados e nomes de tipos de elemento no Schema XML ou DTD, mas na maioria dos casos, será necessária alguma programação para estabelecer a correspondência desejada. Isso geralmente pode ser armazenado como um procedimento para que as utilizações subseqüentes sejam simplesmente comandos ou chamadas com os parâmetros relevantes.

Alternativamente, a maioria dos sistemas de banco de dados agora fornecem um formato de despejo XML que permite exportar uma tabela como está, por exemplo, envolvendo os valores do campo com as tags chamadas após os nomes dos campos. Por exemplo, a opção -X para o comando mysql fará isso, por exemplo

    $ echo 'select * from news;' | mysql -X -u username -p password dbname

<?xml version="1.0"?>
<resultset statement="select * from news" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
  <field name="id">1</field>
  <field name="stamp">0</field>
  <field name="title"></field>
  <field name="date">0000-00-00</field>
  <field name="time">test</field>
  <field name="description">News Engine test item 1</field>
  </row>
</resultset>
$
  

Em casos menos triviais, mas ainda simples, você poderia exportar escrevendo uma rotina de relatório que formata a saída como um documento XML, adicionando as tags relevantes como literais antes e depois de cada valor de dados; E você pode importar escrevendo uma transformação XSLT ou similar que formatou os dados XML como um arquivo de carga no formato preferido do seu banco de dados. Por exemplo, com os seguintes dados:

    <news>
  <entry xml:id="N1" stamp="0" date="0000-00-00" time="test">
    <title></title>
    <description>News Engine test item 1</description>
  </entry>
</news>
  

Você poderia transformá-lo em uma declaração MySQL com lxprintf :

    $ lxprintf -e entry \
  'INSERT INTO `news` VALUES (%s,%s,"%s","%s","%s","%s");\n' \
  'substring(@xml:id,2)' @stamp title @date @time description \
  mynews.xml

INSERT INTO `news` VALUES (1,0,"","0000-00-00","test","News Engine test item 1");
$
  

Os usuários com um histórico em banco de dados ou informática devem estar cientes de que o XML não é um sistema de gerenciamento de banco de dados: é um sistema de marcação de texto. Embora existam muitas semelhanças, alguns dos conceitos de um são simplesmente inexistentes no outro: o XML não possui alguns recursos baseados em banco de dados da mesma forma que os bancos de dados não possuem marcadores. É um erro comum acreditar que o XML é um SGBD como o Oracle ou o Access e, portanto, possui as mesmas facilidades. Não possu.

Os usuários de banco de dados devem ler o artigo ( Salminen e Tompa, 2001 ) [graças a Bart Lateur por identificar isso.] Ronald Bourret também mantém um bom recurso em XML e bancos de dados que discutem bancos de dados XML nativos em http://www.rpbourret.com/xml/XMLAndDatabases.htm .

Há algumas informações sobre o Idioma XQuery (XQL) na nota sobre Pesquisa .