Hi David,
Thanks for the reply! So the behaviour can change based on whether its internal or external? That is very good to know now before I back myself into a corner with the implementation.
Is there a reason for that? I was naively hoping that external DTDs could be more or less pulled into the start of the document and carry on as normal.
Regards
Daniel
On 13 Mar 2022, 16:28 +0000, David Carlisle <d.p.carlisle@gmail.com>, wrote:
You can have the definitions but you can't reference them as you can't have parameter entity references in the internal subset, rxp moans:
$ rxp -sx nes1.xml
Error: PE ref not allowed here in internal subset
in entity "g" defined at line 19 char 1 of file:///c:/tmp/nes1.xml
in unnamed entity at line 23 char 4 of file:///c:/tmp/nes1.xml
If on the other hand you do this in an external DTD it is fine
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE feed SYSTEM "nest1.dtd">
<feed xmlns="&a;">&b;</feed>
where nest1.dtd is
<!ENTITY a 'http://www.w3.org/2005/Atom'>
<!ENTITY b '&e;&f;&g;&h;&i;'>
<!ENTITY c 'tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/'>
<!ENTITY d 'http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/'>
<!ENTITY e '<title>Obfuscated Atom</title>
<updated>2007-10-19T00:00:00+00:00</updated>
<id>&c;</id><link rel="alternate" href=""/>
<link rel="self" href=""/>
<author><name>James Holderness</name></author>'>
<!ENTITY % a '<entry><title>This is title #'>
<!ENTITY % b '</title><updated>2007-10-18T23:'>
<!ENTITY % c ':00+00:00</updated><id>&c;'>
<!ENTITY % d '</id><link href="'>
<!ENTITY % e '.html"/><summary type="html">
This is the <code>summary</code> for entry number '>
<!ENTITY % f '.</summary></entry>'>
<!ENTITY % g '<!ENTITY f "%a;1%b;59%c;1%d;1%e;1%f;">'>
<!ENTITY % h '<!ENTITY g "%a;2%b;58%c;2%d;2%e;2%f;">'>
<!ENTITY % i '<!ENTITY h "%a;3%b;57%c;3%d;3%e;3%f;">'>
<!ENTITY % j '<!ENTITY i "%a;4%b;56%c;4%d;4%e;4%f;">'>
%g;%h;%i;%j;
produces:
$ rxp -x nes1.xml
<feed xmlns="http://www.w3.org/2005/Atom"><title>Obfuscated Atom</title> <updated>2007-10-19T00:00:00+00:00</updated> <id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/</id><link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/" rel="alternate"></link> <link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1_4.atom" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1_4.atom" rel="self"></link> <author><name>James Holderness</name></author><entry><title>This is title #1</title><updated>2007-10-18T23:59:00+00:00</updated><id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/1</id><link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1.html" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1.html"></link><summary type="html"> This is the <code>summary</code> for entry number 1.</summary></entry><entry><title>This is title #2</title><updated>2007-10-18T23:58:00+00:00</updated><id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/2</id><link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/2.html" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/2.html"></link><summary type="html"> This is the <code>summary</code> for entry number 2.</summary></entry><entry><title>This is title #3</title><updated>2007-10-18T23:57:00+00:00</updated><id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/3</id><link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/3.html" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/3.html"></link><summary type="html"> This is the <code>summary</code> for entry number 3.</summary></entry><entry><title>This is title #4</title><updated>2007-10-18T23:56:00+00:00</updated><id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/4</id><link href=""http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/4.html" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/4.html"></link><summary type="html"> This is the <code>summary</code> for entry number 4.</summary></entry></feed>
Hello all,
I was wondering if anyone could help clarify an aspect of the specification for DTDs; I am currently working on an XML parser, but have never really used DTDs myself.
http://www.詹姆斯.com/blog/2007/10/obfuscated-atom
In the above URL, there is a DTD (copied below) with nested entity declarations, is this valid?
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE feed [<!ENTITY a 'http://www.w3.org/2005/Atom'><!ENTITY b '&e;&f;&g;&h;&i;'><!ENTITY c 'tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/'><!ENTITY d 'http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/'><!ENTITY e '<title>Obfuscated Atom</title> <updated>2007-10-19T00:00:00+00:00</updated> <id>&c;</id><link rel="alternate" href=""/> <link rel="self" href=""/> <author><name>James Holderness</name></author>'><!ENTITY % a '<entry><title>This is title #'><!ENTITY % b '</title><updated>2007-10-18T23:'><!ENTITY % c ':00+00:00</updated><id>&c;'><!ENTITY % d '</id><link href="'><!ENTITY % e '.html"/><summary type="html"> This is the <code>summary</code> for entry number '><!ENTITY % f '.</summary></entry>'><!ENTITY % g '<!ENTITY f "%a;1%b;59%c;1%d;1%e;1%f;">'><!ENTITY % h '<!ENTITY g "%a;2%b;58%c;2%d;2%e;2%f;">'><!ENTITY % i '<!ENTITY h "%a;3%b;57%c;3%d;3%e;3%f;">'><!ENTITY % j '<!ENTITY i "%a;4%b;56%c;4%d;4%e;4%f;">'>%g;%h;%i;%j;]><feed xmlns="&a;">&b;</feed>
Saxon and the XSLT processor in Chrome both say no, but if you try the processor in Firefox it appears to process fine.
http://xsltfiddle.liberty-development.net/jy6KM8g
Any pointers in the right direction would be appreciated, many thanks in advance. :)
Regards
Daniel