Re: [richard@cogsci.ed.ac.uk: conditionals]

>The production for ignoreSect [57] is wrong; it requires conditional
>sections within it to be themselves ignoreSect, ie have the keyword
>IGNORE.
>
>We need something like:
>
>ignoreSect ::= '<![' %'IGNORE' '[' ignoredDecls ']]>'
>
>ignoredDecls ::= ... |
>                 '<![' ('IGNORE'|'INCLUDE'|PEReference) '[' ignoredDecls ']]>'
>
>We should also allow the keys of ignored nested conditional sections
>to be references to undeclared parameter entities, say by replacing
>PEReference in the above with    '%' Name ';'

It doesn't need to look past the <![.

>I'm not convinced about the rest of production 57 either: the last
>top-level disjunct appears to match, say,
>
>    <!entity foo "bar">]]>

The final * is in the wrong place: it needs to be moved past the two
following close parentheses.

The idea behind production 57 is to ensure that:

1.  An ignored section ends where an SGML parser thinks it would.  An SGML
parser just looks at <![ and ]]> inside an ignored marked section.

2. Changing IGNORE to INCLUDE wouldn't change where the conditional section
ends.

Without 2, it's impossible to have a really trivial XML parser that just
skips over the prolog without interpreting it.

I think this should do it:

ignoreSect ::= '<![' %'IGNORE' '[' ignoreSectContents ']]>

ignoreSectContents ::= (
 ((SkipLit | Comment | PI) - (Char* ']]>' Char*))
 | ( '<![' ignoreSectContents ']]>')
 | (Char - ([<'"] | ']')
 | ('<! (Char - ('-' | '[')))
)*

James

Received on Monday, 26 May 1997 23:37:53 UTC