ISO 8879 TC2 Formal Syntax Errors

ISO 8879:1986 was amended in 1997 by ISO 8879 TC2 ("WebSGML"). The text of that technical corrigendum contains obvious errors, such as trailing commas in productions; below is a list of what I believe are all of the errors in the formal syntax (this does not include prose errors). Uncorrected text is copyright © 1997, International Organization for Standardization.

These changes are apparently being incorporated into a draft corrigendum.

[2] [3] [145.1] [196] [196.3] [196.4] [196.5] [198] [198.2]

[2] and [3]

The corrigendum says:

[2] SGML subdocument entity =
(
s*,
SGML declaration )?,
prolog,
document instance set,
Ee

The text of the corrigendum obviously refers to production 3, which is called "SGML subdocument entity" in ISO 8879:1986; this is clearly just a typographical error in the production number:

[3] SGML subdocument entity =
(
s*,
SGML declaration )?,
prolog,
document instance set,
Ee

[145.1]

[145.1] data specification =
"DATA",
ps+,
notation name,
data attribute specification?,

The trailing comma is an obvious error. The presumedly correct production is:

[145.1] data specification =
"DATA",
ps+,
notation name,
data attribute specification?

[196]

[196] markup minimization features =
"MINIMIZE",
ps+,
"DATATAG",
ps+,
(
"NO" |
"YES" ),
ps+,
"OMITTAG",
ps+,
(
"NO" |
"YES" ),
ps+,
"RANK",
ps+,
(
"NO" |
"YES" ),
ps+,
(
"SHORTTAG",
ps+,
(
"NO" |
"YES" |
(
start-tag options,
end-tag options,
attribute options ) ) ),
(
ps+,
empty element ending rules,
ps+,
implicit definitions )?

There needs to be ps+, in between start-tag options, end-tag options, and attribute options. For clarity and for parallelism with that between empty element ending rules and implicit definitions, I would put them in this production:

[196] markup minimization features =
"MINIMIZE",
ps+,
"DATATAG",
ps+,
(
"NO" |
"YES" ),
ps+,
"OMITTAG",
ps+,
(
"NO" |
"YES" ),
ps+,
"RANK",
ps+,
(
"NO" |
"YES" ),
ps+,
(
"SHORTTAG",
ps+,
(
"NO" |
"YES" |
(
start-tag options,
ps+,
end-tag options,
ps+,
attribute options ) ) ),
(
ps+,
empty element ending rules,
ps+,
implicit definitions )?

[196.3]

[196.3] attribute options =
"ATTRIB",
ps+,
"DEFAULT",
ps+,
(
"NO" |
"YES" ),
ps+,
"OMITNAME",
(
"NO" |
"YES" ),
ps+,
"VALUE",
ps+,
(
"NO" |
"YES" )

No space is permitted between OMITNAME and the following YES or NO. There is obviously a missing ps+, in between.

[196.3] attribute options =
"ATTRIB",
ps+,
"DEFAULT",
ps+,
(
"NO" |
"YES" ),
ps+,
"OMITNAME",
ps+,
(
"NO" |
"YES" ),
ps+,
"VALUE",
ps+,
(
"NO" |
"YES" )

[196.4]

[196.4] empty element ending rules =
"EMPTYNRM",
ps+,
(
"NO" |
"YES" ),
ps+,

The trailing comma is obviously an error. However, since production [196] provides ps between empty element ending rules and implicit definitions, there is no need for the ending ps nor for the preceding comma:

[196.4] empty element ending rules =
"EMPTYNRM",
ps+,
(
"NO" |
"YES" )

[196.5]

[196.5] implicit definitions =
"IMPLYDEF",
ps+,
"ATTLIST",
ps+,
(
"NO" |
"YES" ),
ps+,
"DOCTYPE",
ps+,
(
"NO" |
"YES" ),
"ELEMENT",
ps+,
(
"NO" |
"YES" ),
ps+,
"ENTITY",
ps+,
(
"NO" |
"YES" ),
ps+,
"NOTATION",
ps+,
(
"NO" |
"YES" ),
ps+,

Again, the trailing comma is obviously an error; and again, neither the entire ps construction nor the preceding comma is necessary. In addition, there is no space between the YES or NO after DOCTYPE and the following ELEMENT; a ps is necessary.

[196.5] implicit definitions =
"IMPLYDEF",
ps+,
"ATTLIST",
ps+,
(
"NO" |
"YES" ),
ps+,
"DOCTYPE",
ps+,
(
"NO" |
"YES" ),
ps+,
"ELEMENT",
ps+,
(
"NO" |
"YES" ),
ps+,
"ENTITY",
ps+,
(
"NO" |
"YES" ),
ps+,
"NOTATION",
ps+,
(
"NO" |
"YES" )

[198]

[198] other features =
"OTHER",
ps+,
"CONCUR",
ps+,
(
"NO" |
"YES" ),
ps+,
"SUBDOC",
ps+,
(
"NO" |
"YES" ),
ps+,
"FORMAL",
ps+,
(
"NO" |
"YES" ),
(
urn feature,
keeprsre feature,
validity feature,
entities feature )?

The text of this production in ISO 8879 TC 2 blew away the number parameter to both CONCUR and SUBDOC. I believe this was unintentional and the production should be:

[198] other features =
"OTHER",
ps+,
"CONCUR",
ps+,
(
"NO" |
(
"YES",
ps+,
number ) ),
ps+,
"SUBDOC",
ps+,
(
"NO" |
(
"YES",
ps+,
number ) ),
ps+,
"FORMAL",
ps+,
(
"NO" |
"YES" ),
(
urn feature,
keeprsre feature,
validity feature,
entities feature )?

[198.2]

[198.2] keeprsre feature =
ps+,
"KEEPRSRE",
ps+,
(
"YES" |
"NO" )

NO is given first in every other YES or NO production. For consistency, this one should match, but Charles Goldfarb (the editor) has indicated that, since this is a cosmetic change, it will wait until a revision of the Standard.

[198.2] keeprsre feature =
ps+,
"KEEPRSRE",
ps+,
(
"NO" |
"YES" )

Back to the SGML productions.

Best viewed with any browser.

Valid HTML
2.0! Last updated and validated 31 May 2001.