Uma pergunta comum ao transferir dados entre documentos XML e um banco de dados é como gerar um schema DTDs XML a partir do banco de dados e vice-versa.
Em resumo, esta é uma operação bastante direta. Deve ser notado, que esta geralmente é uma operação que é executada uma única vez, como a maioria das aplicações, especialmente aplicações verticais que trabalham com um conjunto conhecido de schemas DTD/relacional.
As exceções são ferramentas que armazenam documentos XML randômicos em bancos de dados relacional ou aquele que expões dados relacionais como documentos XML. Na verdade, não é absolutamente claro a utilidade de DTDs nesse caso .
Por exemplo, o procedimento a seguir (um tanto simplista) gera um schema relacional de um DTD1:
1. Para cada tipo de elemento de conteúdo misto ou elementar, crie uma tabela
e uma coluna que seja chave primária.
2. Para cada tipo de elemento com conteúdo misto, crie uma tabela separada
para armazenar o PCDATA, unido à tabela pai pela chave primária do pai.
3. Para cada atributo de único valor daquele tipo de elemento, e para cada tipo
de elemento filho que ocorre isoladamente com conteúdo PCDATA puro, crie uma coluna naquela tabela. Se o tipo de elemento filho ou atributo é opcional, faça uma coluna nula.
4. Para cada atributo multivalorado e para cada tipo de elemento de filho que
ocorre várias vezes com conteúdo PCDATA puro, crie uma tabela separada para armazenar valores, unido à tabela pai pela chave primária do pai.
5. Para cada tipo de elemento filho com conteúdo misto ou elementar, una os
elementos da tabela pai aos elementos da tabela filho com a chave primária do pai.
O procedimento a seguir (também simplista) gera um DTD a partir de um
schema relacional:
6. Para cada tabela, crie um elemento.
7. Para cada coluna em uma tabela, crie um atributo ou um elemento filho
PCDATA puro.
8. Para cada relacionamento chave primária/chave estrangeira na qual uma
coluna de uma tabela relaciona a uma chave primária, crie um elemento filho.
Infelizmente, há várias desvantagens nestes procedimentos. Por exemplo, não há como predizer definitivamente tipos de dados ou comprimentos de coluna a partir do DTD. Qualquer predição, como o que é feito lendo um documento de amostra, pode ser posto abaixo colocando simplesmente dados de outro "tipo" ou um caractere de mais comprimento em um documento. (A solução a longo prazo para este problema é o uso de tipos de dados em documentos de schema XML.)
Semelhantemente, ao gerar um DTD de um schema relacional, não há como predizer a ordem na qual elementos filhos deveriam "acontecer" ou se uma coluna, como um identificador de linha interno ao banco de dados, deveria ser transferida ou não. Em ambos os casos, colisões são possíveis.
Apesar destas desvantagens, estes algoritmos provêem ainda um ponto de partida útil para gerar DTD a partir de schema relacional e vice-versa
Bibliografia
[AG89] Amar Gupta. Integration of Information Systems : Bridging
Heterogeneous Databases (IEEE Press Selected Reprint Series). Inst. of Eletrical.
Dezembro/1989.
[AMA98] Ahmed Elmagarmid, Marek Rusinkiewicz, Amit Sheth. Management of
Heterogeneous and Autonomous Database Systems. Morgan Kaufmann Publishers.
Outubro/1998.
[AR00] Akmal B. Chaudhri, Roberto Zicari. Succeeding with Object Databases:
A Practical Look at Today's Implementations with Java and XML. John Wiley & Sons.
Setembro/2000.
[BM00] Benoit Marchal. XML: Conceitos e Aplicações. Berkeley.
Setembro/2000.
[CD88] C. J. Date. Banco de Dados (Tópicos Avançados). Campus.
Setembro/1988.
[CD91] C. J. Date. Introdução a Sistemas de Banco de Dados. Campus. Fevereiro/1991.
[DD98] Dan Chang, Dan Harkey. Client/Server Data Access With Java and XML. John Wiley & Sons. Setembro/1998.
[DM98] David Megginson. Structuring XML Documents. Prentice Hall Computer Books. Janeiro/1998.
[GD99] George M. Doss. CORBA Developer’s Guide with XML. Wordware Publishing. Agosto/1999.
[HK99] Henry F. Korth. Sistema de Banco de Dados. Makron. Maio/1999.
[HTR00] G. Hussain Chinov, Tyna Hull, Robi Sen, Hussain Chinov. XML for EDI
[JM00] JP Morgenthal. Enterprise Applications Integration with XML and Java. Prentice Hall. Julho/2000.
[NP00] Natanya Pitts-Moultis. XML – Black Book. Solução e Poder. Makron Books. Fevereiro/2000.
[SE99] Simon St. Laurent, Ethan Cerami. Building XML Applications. McGraw Hill Professional Publishing. Maio/1999.
[SH00] Steven Holzner. Inside XML. New Riders. Novembro/2000.
[SM00] Steve Muench. Building Oracle XML Applications. O’Reilly & Associates. Outubro/2000.
[SM00] Sean MacGrath. XML – Aplicações Práticas. Campus. Junho/2000. [SP00] Sams Publishing. Working With Microsoft Sql Server 2000 and XML. Sams. Dezembro/2000.
[SPD99] Serge Abiteboul, Peter Buneman, Dan Suciu. Data on the Web : From
Relations to Semistructured Data and Xml (Morgan Kaufmann Series in Data Management Systems). Morgan Kaufmann Publishers. Outubro/1999.
[SS99] Stephen T. Mohr, Stephen F. Mohr. Designing Distributed Applications
With XML : ASP IE5 LDAP and MSMQ. Wrox Press. Maio/1999.
[VA00] Vipul Kashvap, Amit Sheth. Information Brokering over Heterogeneous
Digital Data : A Metadata-Based Approach (The Kluwer International Series on Advances in Database Systems). Kluwer Academic Pub. Maio/2000.
[VS88] Valdemar Waingort Setzer. Banco de Dados. Edgard Blucher. Janeiro/1988.
[WT00] Wrox Author Team. Professional Metadata W/ DTD's , XML Schemas,
Topic Maps, RDF, Webdav, XML Servers. Wrox Press. Julho/2000.
[XML] Extensible Markup Language (XML) 1.0:
[SOAP] Simple Object Access Protocol (SOAP) Version 1.1: http://www.w3.org/TR/SOAP. Pesquisado em 10/10/2000.
[XMLNS] Namespaces in XML: http://www.w3.org/TR/1999/REC-xml-names- 19990114. Pesquisado em 10/10/2000.
[URI] Uniform Resource Identifiers (URI): Generic Syntax: http://www.ietf.org/rfc/rfc2396.txt. Pesquisado em 01/12/2000. [ISO8601] ISO 8601: Representations of dates and times:
http://www.iso.ch/markete/8601.pdf. Pesquisado em 01/12/2000. [HTTP] Hypertext Transfer Protocol—HTTP/1.1:
http://www.ietf.org/rfc/rfc2616.txt. Pesquisado em 08/12/2000.
[XMLMIME] XML Media Types: http://www.ietf.org/rfc/rfc2376.txt. Pesquisado em
10/10/2000.
[MULTIPART] The MIME Multipart/Related Content-type:
http://www.ietf.org/rfc/rfc2387.txt. Pesquisado em 01/10/2000. [MIME1] MIME Part One: Format of Internet Message Bodies: http://www.ietf.org/rfc/rfc2045.txt. Pesquisado em 01/12/2000.
[MIME2] MIME Part Two: Media Types: http://www.ietf.org/rfc/rfc2046.txt.
Pesquisado em 01/12/2000.
[MIME3] MIME Part Three: Message Header Extensions for Non-ASCII Text: http://www.ietf.org/rfc/rfc2047.txt. Pesquisado em 01/12/2000.
[MIME4] MIME Part Four: Registration Procedures: http://www.ietf.org/rfc/rfc2048.txt. Pesquisado em 01/12/2000. [SMIME] S/MIME Version 3 Message Specification: http://www.ietf.org/rfc/rfc2633.txt. Pesquisado em 01/12/2000.
[CID] Content-ID and Message-ID Uniform Resource Locators: http://www.ietf.org/rfc/rfc2111.txt. Pesquisado em 08/12/2000.
[XDR] XML-Data Reduced (XDR): http://www.ltg.ed.ac.uk/~ht/XMLData- Reduced.htm. Pesquisado em 05/02/2001.
[XSD1] XML Schema Part 1: Structures: http://www.w3.org/TR/xmlschema-1.
Pesquisado em 05/02/2001.
[XSD2] XML Schema Part 2: Data types: http://www.w3.org/TR/xmlschema-2.
Pesquisado em 05/02/2001.
[XP] XML Protocol: http://www.w3.org/2000/xp/. Pesquisado em