Seção 3: Autores
Q 3.20: Como incluir um arquivo XML em outro?
Use uma entidade geral, o mesmo funciona para SGML, ou use XInclude.
Um método é usar as Entidades do Documento, que funcionam exatamente como o SGML, mas requerem um DTD ou um subconjunto interno . Primeiro você declara a entidade que deseja incluir e, em seguida, você se refere ao nome como Referência de Entidade:
<?xml version="1.0"?> <!DOCTYPE novel SYSTEM "/dtd/novel.dtd" [ <!ENTITY chap1 SYSTEM "mydocs/chapter1.xml"> <!ENTITY chap2 SYSTEM "mydocs/chapter2.xml"> <!ENTITY chap3 SYSTEM "mydocs/chapter3.xml"> <!ENTITY chap4 SYSTEM "mydocs/chapter4.xml"> <!ENTITY chap5 SYSTEM "mydocs/chapter5.xml"> ]> <novel> <header> ...blah blah... </header> &chap1; &chap2; &chap3; &chap4; &chap5; </novel>
A diferença entre este método é o usado para incluir um fragmento DTD (veja Como incluir um DTD (fragmento) em outro? ) É que isso usa uma entidade geral externa (arquivo) que é referenciada da mesma maneira que para Uma entidade de caractere(com um e comercial).
A única coisa a ter certeza é que o arquivo incluído não deve ter uma Declaração XML ou DOCTYPE sobre ele. Se você estiver usando um para editar o fragmento, remova-o antes de usar o arquivo dessa maneira. Sim, isso é uma chatice, mas se você tem muitas inclusões como esta, escreva um script para remover a declaração (e cole novamente para edição).
Os Schemas não suportam entidades, então a alternativa é usar XInclude . Esta é uma especificação do W3C para incluir um documento XML (ou fragmento) dentro de outro.
<?xml version="1.0"?> ... <article xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"> <info> <xi:include href="metadata.xml" parse="xml" xpointer="title"/> </info> <sect1> ... </sect1> </article>
Seu software de processamento deve ser capaz de manipular o XInclude para que isso funcione. A sintaxe XPointer pode direcionar o analisador para um local específico dentro do documento, ao contrário das entidades, onde o documento completo está incluído.