3.20

Sezione 3: Autori

Q 3.20: Come includo un file XML in un altro?

Usa un’entità generale, così come si fa in SGML, o usa XInclude.

 

Un metodo è quello di usare Entità di Documento, che funzionano esattamente allo stesso modo di SGML, ma richiedono un DTD o subset interni. Prima devi dichiarare l’entità che vuoi includere e poi fare riferimento ad essa col nome come un Riferimento di Entità:

 
<?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>

La differenza fra questo metodo e quello usato per includere un frammento DTD (vedi Come includo un DTD (o un frammento) in un altro?) è che usano entità generali esterne (file) alle quali vengono ci si riferisce nello stesso modo delle entità di carattere (con un segno ampersand).

Ciò di cui bisogna assicurasi è che il file incluso non debba avere una Dichiarazione XML o DOCTYPE. Se ne stai usando uno per l’editing del frammento, rimuovilo prima di usare il file in questo modo. Si, è una rottura, ma se hai molte inclusioni come questo, scrivi uno script per togliere le dichiarazioni (e incollalo di nuovo per l’editing).

Gli Schemi non  supportano entità, quindi l’alternativa è usare XInclude. Questa è una specifica W3C per includere un documento (o frammento) XML dentro un altro.

<?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>

Il tuo software di elaborazione deve essere in grado di gestire XInclude perché questo funzioni. La sintassi XPointer può guidare il parser ad una posizione specifica all’interno del documento, diversamente dalle entità, dove viene incluso l’intero documento..

Leave a Comment

Your email address will not be published. Required fields are marked *