Come posso definire entità di testo condivise in file XHTML?

2

Ho un documento XHTML che definisce diverse entità di testo nella sua DTD interna. Voglio che queste entità siano disponibili in altri documenti XHTML senza dover tagliare e incollare il DTD interno ovunque.

La risposta che sembra continuare a comparire con altri file XML (non specificamente XHTML) - ad esempio, qui: link - suggerisce che il file XHTML che voglio scrivere assomigli a questo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
<!ENTITY % mydtd SYSTEM "x.ent">
%mydtd;
]>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <title>Example</title>
</head>
<body>
<p>&ldquo;&x; &y;&rdquo;</p>
</body>
</html>

... dove il file x.ent ha questi contenuti:

<!ENTITY x "Hello">
<!ENTITY y "world!">

Ma no. Ad ogni modo, non mostra ciò che mi aspetto in nessuno dei browser con cui ho bisogno di lavorare. Mi aspetto di vedere "Ciao mondo!" racchiuso tra virgolette doppie a destra e a sinistra. Ma Firefox dice & ldquo; è un'entità non definita e Opera mostra il testo tra < p > e < / p > verbatim (visualizzazione di e commerciali anziché virgolette).

Ho anche provato ad inserire la DTD pubblica nella mia DTD interna, quindi:

<!DOCTYPE html [
<!ENTITY % publicdtd PUBLIC "-//W3C//DTD XHTML 1.1//EN"
          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
%publicdtd;
<!ENTITY % mydtd SYSTEM "x.dtd">
%mydtd;
]>

Quindi Firefox si è lamentato che & x; era un'entità indefinita. Opera ha visualizzato le virgolette che mi aspettavo, ma ancora visualizzato & x; e & y; Verbatim; niente salvezza, niente mondo.

Ho pensato che x.ent non avesse bisogno di un tag XML, ma qualcuno ne ha inserito uno nel loro esempio di un file di definizioni di entità, quindi l'ho provato. Neanche questo ha funzionato.

C'è qualche ragione per cui questo non può funzionare in XHTML? O è un difetto in entrambi questi browser? O c'è un altro modo per condividere le entità tra più file? Sfortunatamente, ho bisogno di qualcosa che funzioni in questi due browser, o potrei anche non farlo affatto. Ma se è un difetto nella DTD XHTML 1.1, posso usare una versione diversa.

    
posta David K 27.03.2014 - 03:47
fonte

1 risposta

1

La soluzione più plausibile a questo problema sembra essere l'uso del software per generare i file che verranno effettivamente caricati dal browser.

Ad esempio, una pagina su Uso delle entità su Includi file mostra esempi di entità definite in un file che viene quindi incluso in un documento in modo che il documento possa utilizzare quelle entità. Guardando gli esercizi nella metà inferiore della pagina, tuttavia, c'è un passaggio importante che non faceva parte del processo che stavo seguendo:

Produce example.html by normalizing example.xml.
% xmllint --dropdtd --noent example.xml > example.html

In altre parole, mentre il file che scrivi (esempio.xml) ha qualche somiglianza sintattica al file che carichi nel tuo browser (esempio.html), non è lo stesso file. L'utilità xmllint ha risolto tutti i riferimenti di entità con nome che hai creato, produrre un file che dipende solo dalla DTD pubblica.

    
risposta data 19.03.2015 - 22:55
fonte

Leggi altre domande sui tag