4D inclui um conjunto de comandos utilizados para analizar objetos que contenham os datos XML (eXtensible Markup Language).
Nota sobre comandos thread-seguros: referências XML criadas por um processo preemptivo só podem ser usadas naquele processo específico. Por outro lado, referências XML ciradas por um processo cooperativo podem ser usadas por qualquer outro processo cooperativo (mesmo comportamento que em versões anteriores) mas não podem ser usadas em qualquer processo preemptivo.
A linguagem XML é um padrão de intercâmbio de dados. Está baseado no uso de etiquetas e permite descrever de maneira precisa os dados intercambiados assim como sua estrutura. Os arquivos XML são arquivos em formato Texto, seu conteúdo é analisado (parsing) pelas aplicações que importam os dados. Hoje em dia, muitas aplicações são compatíveis com este formato.
Para maior informação sobre XML, consulte, por exemplo, os sites http://xml.org e http://www.w3.org.
Para ser compatível com XML, 4D utiliza uma biblioteca chamada Xerces.dll desenvolvida pela sociedade Apache Foundation. 4D é compatível XML versão 1.0.
Nota: 4D permite importar e exportar diretamente os dados em formato XML utilizando o editor de importação/exportação.
Os comandos de este tema têm o prefixo DOM. Na verdade, 4D oferece dois conjuntos independentes de comandos XML, com prefixo DOM e SAX: DOM (Document Object Model) e SAX (Simples API XML) são dois modos de análise diferentes dos documentos XML.
• O modo DOM analisa uma fonte XML e cria sua estrutura (sua “árvore”) na memória. Por esta razão, o acesso a cada elemento da fonte é extremamente rápido. Entretanto, como a totalidade da árvore é armazenada em memória, o processamento de documentos XML grandes poderia ultrapassar a capacidade de memória e portanto provocar erros.
• O modo SAX não cria uma árvore em memória. Neste modo, os “eventos” (tais como o início ou o final de um elemento) são gerados durante a análise da fonte. Este modo lhe permite analisar documentos XML de qualquer tamanho, sem importar a quantidade de memória disponível. Os comandos SAX são agrupados no tema "XML SAX". Para maior informação, consulte a seção Introdução aos comandos XML SAX.
Para maior informação sobre padrões XML, consulte os seguintes websites: http://www.saxproject.org/?selected=event e http://www.w3schools.com/xml/.
Os objetos criados, modificados ou analizados pelos comandos DOM de 4D podem ser de tipo texto, URLs, documentos ou BLOBs. Os comandos DOM utilizados para a abertura dos objetos XML em 4D são DOM Parse XML source e DOM Parse XML variable.
Varios comandos lhe permitem ler, analizar e escrever os elementos e os atributos. A recuperação de erros é realizada através do comando DOM Parse XML variable(comum para ambos padrões XML).
O comando XML GET ERROR permite datar a fonte ao final.
Nota sobre o uso de parâmetros BLOB XML: as estruturas XML estão baseadas em dados de tipo texto, por isso é recomendado utilizar variáveis ou campos de tipo texto para manipulá-las. Por razões históricas, os comandos XML de 4D (por exemplo DOM Parse XML variable) aceitam parâmetros de tipo BLOB. Em versões anteriores de 4D, o tamanho das variáveis de tipo Texto está limitado a 32 KB. A partir da versão 11 de 4D, as variáveis e os campos de tipo texto podem conter até 2 GB de dados. Como a limitação original foi eliminada, agora não se recomenda armazenar texto em BLOBs. O uso de BLOBs está reservado para o processamento de dados binários. Conforme com as especificações XML, a partir de 4D v12, os dados binários são codificados automáticamente em Banco64, mesmo quando o BLOB contém texto.
Três comandos XML DOM (DOM Create XML element, DOM Find XML element e DOM SET XML ELEMENT VALUE) aceitam a notação XPath para o acesso aos elementos XML.
A notação XPath vem da linguagem XPath, designado para navegar dentro de estruturas XML. Permite determinar diretamente os elementos dentro de uma estrutura XML através de uma sintaxe de tipo "rota de acesso", sem ter que indicar necessariamente a rota completa. Por exemplo, dada a seguinte estrutura
<RootElement>
<Elem1>
<Elem2>
<Elem3 Font=Verdana Size=10> </Elem3>
</Elem2>
</Elem1>
</RootElement>
A notação XPath permite acessar ao elemento 3 utilizando a sintaxe /
RootElement/Elem1/Elem2/Elem3.4D aceita igualmente os elementos XPath indexados, utilizando a sintaxe Element[ElementNum]. Por exemplo, dada a seguinte estrutura:
<RootElement> <Elem1>
<Elem2>aaa</Elem2>
<Elem2>bbb</Elem2>
<Elem2>ccc</Elem2>
</Elem1>
</RootElement>
A notação XPath permite acessar o valor “ccc” usando a sintaxe /RootElement/Elem1/Elem2[3] .
Para uma ilustração da notação XPath, por favor consulte os exemplos dos comandos DOM Create XML element e DOM Find XML element.
Os seguintes conjuntos de caracteres são compatíveis com os comandos XML DOM e XML SAX de 4D:
- ASCII
- UTF-8
- UTF-16 (Big/Small Endian)
- UCS4 (Big/Small Endian)
- EBCDIC code pages IBM037, IBM1047 y IBM1140 encodings,
- ISO-8859-1 (ou Latin1)
- Windows-1252.
A linguagem XML utiliza numerosos termos e acrônimos específicos. Esta lista não exaustiva detalha os principais conceitos XML utilizados pelos comandos e funções de 4D.
Atributo: Uma subetiqueta XML associada a um elemento. Um atributo sempre contém um nome e um valor (ver diagrama abaixo).
Filho: Em uma estrutura XML, um elemento em um nível diretamente inferior a outro.
DTD: Document Type Declaration (Declaração de tipo de documento). A DTD grava o conjunto de regras e de propriedades específicas que deve seguir um documento XML. Estas regras definem, mais particularmente, o nome e conteúdo de cada etiqueta além de seu conteúdo. Esta formalização dos elementos permite verificar que um documento XML esteja em conformidade (nesse caso, se declara “válido”).
A DTD pode ser incluído no documento XML (DTD interna) ou em um documento separado (DTD externo). Note que a DTD não é obrigatória.
Elemento: uma etiqueta XML. Um elemento sempre contém um nome e um valor. Opcionalmente, um elemento pode conter atributos (ver diagrama).
RefElement: Referência XML utilizada pelos comandos XML de 4D para especificar uma estrutura XML. Esta referência está formada por 8 caracteres codificados em forma hexadecimal, o qual significa que sua longitude é de 16 ou 32 caracteres dependendo de que utiliza um sistema de 32 ou 64 bits. Se recomenda declarar as referencias XML utilizando a diretiva C_TEXT.
Pai: Em uma estrutura XML, um elemento de um nível diretamente superior a outro.
Parsing, parser (Analisador): ação de analisar o conteúdo de um objeto estruturado para extrair informação útil. Os comandos do tema “XML” são utilizadas para analisar o conteúdo de todo objeto XML.
Raiz (Root): elemento localizado no primeiro nível de uma estrutura XML
Irmão: em uma estrutura XML, elemento do mesmo nível que outro.
Estrutura XML: objeto XML estruturado. Este objeto pode ser um documento, uma variável, ou um elemento.
Validação: um documento XML é “validado” pelo analisador XML quando está “bem formado” e quando cumpre com as especificações da DTD. Ver também Bem formado.
Bem formado: um documento XML é declarado “bem formado” pelo analisador XML quando cumpre com as especificações XML genéricas. Ver também Validação.
XML: eXtensible Markup Language (Linguagem de etiquetas evolutivo). Padrão de intercâmbio de dados computadorizado que permite transferir dados como também sua estrutura. A linguagem XML está baseado no uso de etiquetas e uma sintaxe específica, de acordo com a linguagem HTML. Entretanto, a diferença deste último, a linguagem XML permite a definição de etiquetas personalizadas.
XSL: eXtensible Stylesheet Language (Linguagem de folhas de estilo evolutivo). Linguagem que permite definir as folhas de estilo utilizadas para processar e visualizar os conteúdos de um documento XSL.
Varias funções deste tema devolvem uma referência de elemento XML. Se ocorrer um erro durante a execução de uma função, por exemplo se a referência do elemento raiz for inválido, a variável OK assume o valor 0 e o comando gera um erro.
Além disso, a referência devolvida neste caso é uma sequência de caracteres "0" (16 caracteres em 32-bits e 32 caracteres en 64-bits)