XML e XPath
Documentos bem formados, elementos e atributos, e consultas XPath com predicados.
O XML representa dados em texto com etiquetas: legível por pessoas, processável por máquinas e independente da linguagem. Nesta cadeira aparece como formato de troca e de configuração, e o XPath é a linguagem para ir buscar pedaços a um documento XML sem o percorrer à mão.
Documentos bem formados
Um documento XML tem um elemento raiz único, etiquetas bem aninhadas e atributos entre aspas. O catálogo da mercearia em catalogo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
<livro isbn="978-0-13-110362-7">
<titulo>C Programming Language</titulo>
<autor>Kernighan</autor>
<preco>45.00</preco>
</livro>
<livro isbn="978-0-596-52068-7">
<titulo>JavaScript: The Good Parts</titulo>
<autor>Crockford</autor>
<preco>25.00</preco>
</livro>
</catalogo>
Cada livro é um elemento com um atributo (isbn) e três elementos filhos. A distinção entre atributo e elemento filho é uma decisão de modelação: atributos para identificadores e metadados curtos, elementos para conteúdo que pode crescer ou repetir-se. Ao contrário do HTML, o XML não perdoa: uma etiqueta por fechar ou mal aninhada invalida o documento inteiro. Valida sempre antes de culpares a consulta.
Consultas XPath
O XPath navega na árvore com um caminho parecido com o dos ficheiros. Sobre o catálogo acima:
//livroescolhe todos os elementoslivro, em qualquer profundidade.//livro/tituloescolhe os títulos desses livros.//livro[@isbn="978-0-596-52068-7"]escolhe o livro com esse atributo.//livro[preco<30]/tituloescolhe os títulos dos livros com preço abaixo de 30, ou seja, “JavaScript: The Good Parts”.
Os parênteses retos são predicados: condições que filtram os nós. Lê a última de dentro para fora: para cada livro, fica com os que têm preco menor que 30 e devolve o titulo. É a mesma ideia do WHERE do SQL que usaste no PHP, aplicada a uma árvore em vez de uma tabela.
Quando usar XML
Usa XML quando o formato precisa de validação formal contra um esquema, de namespaces para misturar vocabulários ou de ferramentas de transformação. Para trocar dados simples entre o teu JavaScript e o teu PHP, o JSON da página de HTTP é mais leve e direto. A relação entre os dois resume-se assim: JSON para dados que o programa consome, XML para documentos que precisam de contrato.