[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Nested entity declarations in DTDs

  • From: David Carlisle <d.p.carlisle@gmail.com>
  • To: daniel@devasta.ie
  • Date: Sun, 13 Mar 2022 18:21:27 +0000

Re:  Nested entity declarations in DTDs


On Sun, 13 Mar 2022 at 16:59, <daniel@devasta.ie> wrote:


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?

"Why" questions are hard to answer, especially when there are people watching who were there and could answer:-)
But I think that the idea was that processors are allowed to not fetch external subsets but are required to process the internal subset
so the internal subset has a restricted syntax so that such implementations don't need the full weirdness power of full DTD processing capability.

David

 
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 "&#37;a;1&#37;b;59&#37;c;1&#37;d;1&#37;e;1&#37;f;">'>
<!ENTITY % h '<!ENTITY g "&#37;a;2&#37;b;58&#37;c;2&#37;d;2&#37;e;2&#37;f;">'>
<!ENTITY % i '<!ENTITY h "&#37;a;3&#37;b;57&#37;c;3&#37;d;3&#37;e;3&#37;f;">'>
<!ENTITY % j '<!ENTITY i "&#37;a;4&#37;b;56&#37;c;4&#37;d;4&#37;e;4&#37;f;">'>
%g;%h;%i;%j;


produces:



$ rxp -x nes1.xml
<feed xmlns="http://www.w3.org/2005/Atom"><title>Obfuscated Atom</title>&#10;  <updated>2007-10-19T00:00:00+00:00</updated>&#10;  <id>tag:xn--8ws00zhy3a.com,2006-05-04:/tests/atom/obfuscated/</id><link href="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/" rel="alternate"></link>&#10;  <link href="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1_4.atom" rel="self"></link>&#10;  <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="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/1.html"></link><summary type="html">&#10;  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="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/2.html"></link><summary type="html">&#10;  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="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/3.html"></link><summary type="html">&#10;  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="" href="" target="_blank">http://www.xn--8ws00zhy3a.com/tests/atom/obfuscated/4.html"></link><summary type="html">&#10;  This is the <code>summary</code> for entry number 4.</summary></entry></feed>

On Sun, 13 Mar 2022 at 15:40, <daniel@devasta.ie> wrote:
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="" % e '.html"/><summary type="html">  This is the <code>summary</code> for entry number '><!ENTITY % f '.</summary></entry>'><!ENTITY % g '<!ENTITY f "&#37;a;1&#37;b;59&#37;c;1&#37;d;1&#37;e;1&#37;f;">'><!ENTITY % h '<!ENTITY g "&#37;a;2&#37;b;58&#37;c;2&#37;d;2&#37;e;2&#37;f;">'><!ENTITY % i '<!ENTITY h "&#37;a;3&#37;b;57&#37;c;3&#37;d;3&#37;e;3&#37;f;">'><!ENTITY % j '<!ENTITY i "&#37;a;4&#37;b;56&#37;c;4&#37;d;4&#37;e;4&#37;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


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.