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.