Hi,
Trying to validate CSS linked from a XHTML document, I encountered a
problem with the online W3C CSS validator. It looks like it doesn't like
some document type declaration. In fact, looking at this mailing list's
archives, it seems that some people have allready seen that behaviour.
I may be wrong but I believe this is a bug. Sorry if this is a known
issue. My english might not be quite correct, but I'll try to be
understandable. :-)
Ok, here is what my documents contain :
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"/path/to/dtd">
I get this message :
org.xml.sax.SAXException:
Please, fix your system identifier (URI) in the DOCTYPE rule
Changing the system identifier to "http://hostname/path/to/dtd" doesn't
help. And while some people have made the mistake in the past, the DTD
file do really exist in the specified location. Also looking at my Web
server's log, I don't see any attempt to read the DTD. As a side note,
while I was reading the log file I noticed that the validator loaded the
document twice. Is that a normal behaviour ?
The validator will only accept a document type declaration containing a
system identifier pointing to a DTD on w3.org, in some places that
people who wrote the validator consider "standard". For a XHTML 1.0
Strict document, this is
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd".
Reading the following mail confirmed this :
http://lists.w3.org/Archives/Public/www-validator-css/2001Jul/0096.html
So let's take a closer look at the XML specification.
http://www.w3.org/TR/REC-xml#dt-doctype
[Definition: The XML document type declaration contains or points to
markup declarations that provide a grammar for a class of documents.
This grammar is known as a document type definition, or DTD. The
document type declaration can point to an external subset (a special
kind of external entity) containing markup declarations, or can
contain the markup declarations directly in an internal subset, or
can do both. The DTD for a document consists of both subsets taken
together.]
In our case, the declaration points to an external DTD. Then we have to
look at the external entity definition.
http://www.w3.org/TR/REC-xml#dt-extent
...
[Definition: The SystemLiteral is called the entity's system
identifier. It is a URI reference (as defined in [IETF RFC 2396],
updated by [IETF RFC 2732]), meant to be dereferenced to obtain
input for the XML processor to construct the entity's replacement
text.] It is an error for a fragment identifier (beginning with a #
character) to be part of a system identifier. Unless otherwise
provided by information outside the scope of this specification
(e.g. a special XML element type defined by a particular DTD, or a
processing instruction defined by a particular application
specification), relative URIs are relative to the location of the
resource within which the entity declaration occurs. A URI might
thus be relative to the document entity, to the entity containing
the external DTD subset, or to some other external parameter entity.
...
Examples of external entity declarations:
<!ENTITY open-hatch
SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY open-hatch
PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
"http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY hatch-pic
SYSTEM "../grafix/OpenHatch.gif"
NDATA gif >
Then, what's wrong with "/path/to/dtd" present in the document type
declaration of my documents ?
Fernand
(please CC me replies)