My two'pennorth - public identifiers are also used for cataloging DTDs by
content management systems like Astoria from Chrystal Software. The system
id of a DTD is going to change as you move documents from the database in
the CMS to a local file system and back again. The public ID remains
invariant and allows the CMS to match documents against stored DTDs.
Of course, a lot of these systems have an SGML pedigree which might be why
they adopted the public identifier mechanism for handling XML documents as
It's no bad idea to have a consistent naming mechanism for creating public
identifiers for your DTDs:
1) They provide documentary info (as another poster has pointed out).
2) Some XML software will actually use the public identifier.
3) It doesn't break anything else.
From: John E. Simpson [mailto:[log in to unmask]]
Sent: 10 October 2000 18:32
To: [log in to unmask]
Subject: Re: referencing an external DTD
At 12:26 PM 10/10/2000 -0400, Garg, Sanjeev wrote:
>Also, please explain me significance of '-//W3C/DTD XHTML 1.0
>Strict//EN' parameter. I have specified it after looking at the previous
>What I can figure out is: the language is English. :-)
That "-//W3C [etc.]//EN" thing is called a public identifier. Here's what
Tim Bray's Annotated XML Spec (http://www.xml.com/axml/axml.html) says
about public IDs:
Public Identifiers Are Non-Portable
...public identifiers are a trick inherited from SGML that
are probably only useful to people who already have working
SGML software installed. Remember that if you use public
identifiers within your own organization, that's perfectly
OK, but if you want to interchange XML documents with anybody
external, they have the right to demand, and you have the
obligation to provide, a working system identifier (URI) for
each external entity.
In general, the purpose of a public ID (as opposed the system ID, like your
"http://xxx/xxx/xxx/sample.dtd" example) is to say "what a thing is" (as
opposed to "where to find a thing"). If your software doesn't know how to
map public IDs to some useful purpose, including a public ID really serves
only as a form of documentation. The system ID, on the other hand, is
(almost?) universally understood by XML processing applications.
The difference between public and system IDs is like the difference
between, say, A4 paper size and US letter. In a complete universe, free of
ambiguities, laser printers would only need a single paper size. In this
universe, which paper size you use depends on where you happen to be
sitting. XML processors are required to handle system IDs; they may or may
not be "smart" enough (or sufficiently backwards-compatible) to handle
John E. Simpson | "He asked me if I knew what
http://www.flixml.org | time it was. I said, 'Yes, but
XML Q&A: http://www.xml.com | not right now.'" (Steven Wright)