Lists Home |
Date Index |
----- Original Message -----
From: "Jeff Rafter" <firstname.lastname@example.org>
Sent: Thursday, October 28, 2004 1:32 PM
> I was wondering if I could get some clarification on this paragraph:
> "Note that non-validating processors are not obligated to to read and
> process entity declarations occurring in parameter entities or in the
> external subset; *for such documents*, the rule that an entity must be
> declared is a well-formedness constraint only if standalone='yes'."
> (emphasis added).
> My question is as follows-- if you have a non-validating processor which
> is processing entity declarations occurring in PEs or the ExtSubset is
> it also a violation of the WFC if it encounters an undeclared entity
> ref even when standalone="no"?
> I can't find a good way to make clear what I am asking-- I think my
> expectation was that instead of "for such documents" it would read "for
> such processors". There is an important distinction there and I think I
> have just read it wrong so many times I can't get it straight.
When I re-implemented this in Expat, I found this WFC hard to understand,
so I rewrote it. Below is an excerpt from my patch description:
--- start ---
1) Re-implementation of WFC: Entity Declared.
I re-wrote the WFC in a way that was easier to understand for me:
First, I split the problem into two questions:
Q1) *When* should one check if a reference matches an entity declaration
in the right location?
This is different depending on whether the reference is in the DTD
or the document content,
The reference is in the internal subset, and:
a) If standalone = "yes": the reference is outside of any PE
b) If standalone = "no" or undefined: So far no PE has been read
(which implies the reference is outside of any PE)
A) The document has no DTD
B) The document has only an internal subset, and this subset contains
no PE references
C) standalone = "yes"
Q2) What should one check then?
Reference in DTD *and* document content:
An entity declaration with matching name was read, which is in the
internal subset, but outside of any PE (which is automatically given
in case Q1)-DTD-b)).
GE references in default attribute values must come after the matching
--- end ---
Btw, I worked on this in conjunction with section 5.1 of the spec.
Hope that helps,