Re: question regarding dtd in xxe-file and declaration for # within xml-file
Hussein Shafie <[email protected]> Tue, 28 Jun 2022 17:29:32 +0200
| Newsgroups | gmane.editors.xxe.general |
|---|---|
| Message-ID | <[email protected]> |
On 6/28/22 11:50, Madlik, Monika (LNG-VIE) wrote:
>
> we are using XMLMind Professional Edition 9.5.1 and I have a problem
> with my DTD and an additional needed nbsp-declaration within my template.
>
> In my xxe-file I declared the DTD like this:
>
> <cfg:dtd systemId="dtd/artikel_intern.dtd"/>
This XXE configuration element simply means that you want XXE to
validate your documents against "dtd/artikel_intern.dtd" even if your
documents do not start with a <!DOCTYPE> pointing to a DTD. Nothing more
than this.
More information here:
http://www.xmlmind.com/xmleditor/_distrib/doc/configure/dtd.html
Please also carefully read the warning note found at the end of this page.
<cfg:dtd> is seldom, if ever, used. Generally when a DTD is being used
to validate a XML document, the best practice is to start your XML
document with the corresponding <!DOCTYPE> declaration.
DocBook v4.5 example:
* Template:
---
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<article>
<articleinfo>
<title></title>
...
---
* docbook.xxe does NOT contain <cfg:dtd>
* DocBook XML catalog:
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
prefer="public">
<public publicId="-//OASIS//DTD DocBook XML V4.5//EN"
uri="dtd/V4.5/docbookx.dtd"/>
</catalog>
>
> So, when I open a template with this xxe-file, it’s automatically
> validated.
>
> BUT – in my template I have another declaration included:
>
> <!DOCTYPE artikel [<!ENTITY nbsp " ">]>
>
> So if a user opens a template, my expectation is, that the template is
> validated against the given DTD AND when I save the file, that the
> additional declaration (<cfg:dtd systemId="dtd/artikel_intern.dtd"/>) is
> included in the saved xml-file. BUT when I save my file, the additional
> declaration is not existent in the saved file anymore.
That's normal. Configuration element:
<cfg:dtd systemId="dtd/artikel_intern.dtd"/>
never, ever, caused XXE to add:
<!DOCTYPE artikel systemId="dtd/artikel_intern.dtd">
to the saved documents.
XXE never adds a DTD (or a schema) declaration to a saved document.
Such DTD declaration must be found *beforehand* in the document being
edited (that is, File|Open) and in the documents templates (that is,
File|New).
>
> In the old versions this wasn’t a problem. Is there any possibility to
> do this in version 9.5.1 as well?
No. Sorry.
>
> I need the additional declaration (<!DOCTYPE artikel [<!ENTITY nbsp
> " ">]>) mandatory in my saved file. Otherwise I have a problem with
> further transformations …
>
I'm sorry but I don't understand.
I don't see why you would have problems with further transformations.
Except if your documents are saved using the US-ASCII encoding (e.g.
your artikel documents starts with <?xml version="1.0"
encoding="US-ASCI"?>), the nbsp characters are really there in the saved
document but as plain characters (that is, as Unicode code point
U+00A0), not as a character entity reference (that is, not as " "
or " " or " ").
FYI:
--> If, for any reason, you want to always save nbsp characters as a
character entity reference, in "Options|Preferences", Save section,
a) Check "Save characters outside encoding as entity references"
b) Type:
---
160
---
in the "In addition to characters outside the encoding, save the
following characters as entity references" field.
See
http://www.xmlmind.com/xmleditor/_distrib/doc/help/saveOptions.html#saveCharsAsEntityRefs
OR
--> For maximum interchange compatibility, please consider this best
practice:
1) Removing
<cfg:dtd systemId="dtd/artikel_intern.dtd"/>
from your .xxe file. This configuration element is really XXE specific.
2) Adding
<!DOCTYPE artikel systemId="dtd/artikel_intern.dtd" [
<!ENTITY nbsp " ">
]>
to all your existing artikel documents and to all your artikel templates.
3) Adding to the directory containing your artikel.xxe, an XML catalog
instructing XXE and all XML-catalog-aware software where to find a local
copy of "artikel_intern.dtd".
For example, artikel_catalog.xml:
---
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="dtd/artikel_intern.dtd"
uri="file:///Users/monika/xml/dtd/artikel_intern.dtd"/>
</catalog>
---
More information here:
https://xerces.apache.org/xml-commons/components/resolver/resolver-article.html
--
XMLmind XML Editor Support List
[email protected]
http://www.xmlmind.com/mailman/listinfo/xmleditor-support