# ............................................................... # XML specification DTD ......................................... # ............................................................... # $Id: xmlspec.rnc,v 1.1 2006/05/31 17:20:37 plehegar Exp $ # TYPICAL INVOCATION: # # # # PURPOSE: # This XML DTD is for W3C specifications and other technical reports. # It is based in part on the TEI Lite and Sweb DTDs. # # COPYRIGHT: # # Copyright (C) 2000, 2001, 2002, 2003 Sun Microsystems, Inc. All Rights Reserved. # This document is governed by the W3C Software License[3] as # described in the FAQ[4]. # # [1] http://www.w3.org/TR/xslt # [2] http://www.w3.org/XML/1998/06/xmlspec-report-v21.htm # [3] http://www.w3.org/Consortium/Legal/copyright-software-19980720 # [4] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD # # DEPENDENCIES: # None. # # CHANGE HISTORY: # The list of historical changes is at the end of the DTD. For recent changes, # see the CVS log. # # For all details, see the design report at: # # # # This report is now out-of-date, but no more recent report has been prepared. # # #2003-06-25: nwalsh: Added translationloc, preverrataloc, rfc2119 # # #2003-05-28: nwalsh: Added errataloc, fixed IE bug. Added @num to prod. # # Published V2.4 # # #2003-03-12: nwalsh: Added local.* PEs to a number of additional # places to make customization layers easier. # # Published V2.3 # # #2002-09-04: nwalsh: Added 'phrase' to title, subtitle, version, # w3c-designation, w3c-doctype, day, month, year, name, # affiliation, email, language, role, lhs, rhs, com, # typename, date, loc, nt, sub, sup, term, termref, # titleref, xnt, xspecref, xtermref # # This is *solely* to support automated diffing. Users # are explicitly forbidden from using this as an escape # hatch to get extra markup in these contexts. # # #2001-10-08: nwalsh: Added local.arg.att and local.proto.att # # #2002-08-14: nwalsh: Published V2.2 # # Added marked sections around element and attlist declarations and # added the altlocs element # # MAINTAINERS: # Norman Walsh # Sun Microsystems, Inc. # Norman.Walsh@Sun.COM # voice: +1 413 256 6985 # fax: +1 413 256 6985 # # Eve Maler # Sun Microsystems, Inc. # elm@east.sun.com # voice: +1 781 442 3190 # fax: +1 781 442 1437 # ............................................................... # Entities for characters and symbols ........................... # ............................................................... # #1998-03-10: maler: Added “ and ”. # # Used 8879:1986-compatible decimal character # # references. # # Merged charent.mod file back into main file. # #1998-05-14: maler: Fixed ldquo and rdquo. Gave mdash a real number. # #1998-12-03: maler: Escaped the leading ampersands. # ............................................................... # Entities for classes of standalone elements ................... # ............................................................... # #1997-10-16: maler: Added table to %illus.class;. # #1997-11-28: maler: Added htable to %illus.class;. # #1997-12-29: maler: IGNOREd table. # #1998-03-10: maler: Removed SGML Open-specific %illus.class;. # # Added "local" entities for customization. # #1998-05-14: maler: Added issue to %note.class;. # # Removed %[local.]statusp.class;. # #1998-05-21: maler: Added constraintnote to %note.class;. # #1998-08-22: maler: Changed htable to table in %illus.class;. # # Added definitions to %illus.class;. # #2000-03-07: maler: Added proto and example to %illus.class;. namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" namespace xlink = "http://www.w3.org/1999/xlink" local.p.class = notAllowed p.class = p | local.p.class local.list.class = notAllowed list.class = ulist | olist | slist | glist | local.list.class local.speclist.class = notAllowed speclist.class = orglist | blist | local.speclist.class local.note.class = notAllowed note.class = note | issue | wfcnote | vcnote | constraintnote | local.note.class local.illus.class = notAllowed illus.class = eg | graphic | scrap | table | definitions | proto | example | local.illus.class # ............................................................... # Entities for classes of phrase-level elements ................. # ............................................................... # #1997-12-29: maler: Added xspecref to %ref.class;. # #1998-03-10: maler: Added %ednote.class;. # # Added "local" entities for customization. # #2000-03-07: maler: Added function, var, el, att, and attval to # # %tech.class;. # # Added sub, sup, and phrase to %emph.class;. local.annot.class = notAllowed annot.class = footnote | local.annot.class local.termdef.class = notAllowed termdef.class = termdef | term | local.termdef.class local.emph.class = notAllowed emph.class = emph | phrase | rfc2119 | quote | sub | sup | local.emph.class local.ref.class = notAllowed ref.class = bibref | specref | termref | titleref | xspecref | xtermref | local.ref.class local.loc.class = notAllowed loc.class = loc | local.loc.class local.tech.class = notAllowed tech.class = kw | nt | xnt | code | function | var | el | att | attval | local.tech.class local.ednote.class = notAllowed ednote.class = ednote | local.ednote.class # ............................................................... # Entities for mixtures of standalone elements .................. # ............................................................... # #1997-09-30: maler: Created %p.mix; to eliminate p from self. # #1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;. # #1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;. # #1997-10-16: maler: Created %entry.mix;. Note that some elements # # left out here are still allowed in termdef, # # which entry can contain through %p.pcd.mix;. # #1997-11-28: maler: Added %p.class; to %statusobj.mix;. # #1998-03-10: maler: Added %ednote.class; to all mixtures, except # # %p.mix; and %statusobj.mix;, because paragraphs # # and status paragraphs will contain ednote # # through %p.pcd.mix;. # #1998-03-23: maler: Added %termdef.mix; (broken out from # # %termdef.pcd.mix;). # #1998-05-14: maler: Removed %statusobj.mix; and all mentions of # # %statusp.mix;. local.div.mix = notAllowed # compensate for IE bug; suggested by ht div.mix = p.class | list.class | speclist.class | note.class | illus.class | ednote.class | local.div.mix local.obj.mix = notAllowed # compensate for IE bug; suggested by ht obj.mix = p.class | list.class | speclist.class | note.class | illus.class | ednote.class | local.obj.mix local.p.mix = notAllowed # compensate for IE bug; suggested by ht p.mix = list.class | speclist.class | note.class | illus.class | local.p.mix # compensate for IE bug; suggested by ht local.hdr.mix = notAllowed # compensate for IE bug; suggested by ht hdr.mix = p.class | list.class | ednote.class | local.hdr.mix local.termdef.mix = notAllowed # compensate for IE bug; suggested by ht termdef.mix = note.class | illus.class | local.termdef.mix # ............................................................... # Entities for mixtures of #PCDATA and phrase-level elements .... # ............................................................... # Note that %termdef.pcd.mix contains %note.class; # and %illus.class;, considered standalone elements. # #1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;. # #1997-11-28: maler: Added %loc.class; to %p.pcd.mix;. # #1998-03-10: maler: Added %ednote.class; to all mixtures. # #1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to # # %termdef.mix;. # #1998-05-14: maler: Removed %statusp.pcd.mix;. # #1998-05-21: maler: Added constraint element to %eg.pcd.mix;. # #1999-07-02: maler: Added %loc.class; to %head.pcd.mix;, # # %label.pcd.mix;, %eg.pcd.mix;, %termdef.pcd.mix;, # # %tech.pcd.mix; (net: all PCD mixes have it). # # Removed unused %loc.pcd.mix;. local.p.pcd.mix = notAllowed # compensate for IE bug; suggested by ht p.pcd.mix = text | annot.class | termdef.class | emph.class | ref.class | tech.class | loc.class | ednote.class | local.p.pcd.mix local.head.pcd.mix = notAllowed # compensate for IE bug; suggested by ht head.pcd.mix = text | annot.class | emph.class | tech.class | loc.class | ednote.class | local.head.pcd.mix local.label.pcd.mix = notAllowed # compensate for IE bug; suggested by ht label.pcd.mix = text | annot.class | termdef.class | emph.class | tech.class | loc.class | ednote.class | local.label.pcd.mix local.eg.pcd.mix = notAllowed # compensate for IE bug; suggested by ht eg.pcd.mix = text | annot.class | emph.class | loc.class | ednote.class | constraint | local.eg.pcd.mix local.termdef.pcd.mix = notAllowed # compensate for IE bug; suggested by ht termdef.pcd.mix = text | term | emph.class | ref.class | tech.class | loc.class | ednote.class | local.termdef.pcd.mix local.bibl.pcd.mix = notAllowed # compensate for IE bug; suggested by ht bibl.pcd.mix = text | emph.class | ref.class | loc.class | ednote.class | local.bibl.pcd.mix local.tech.pcd.mix = notAllowed # compensate for IE bug; suggested by ht tech.pcd.mix = text | loc.class | ednote.class | phrase | rfc2119 | local.tech.pcd.mix # ............................................................... # Entities for customizable content models ...................... # ............................................................... # #1998-03-10: maler: Added customization entities. # #1998-05-14: maler: Allowed prevlocs and latestloc in either order. # #1999-07-02: maler: Made version optional; added copyright element. # #2000-03-07: maler: Allowed status and abstract in opposite order. spec.mdl = header, front?, body, back? header.mdl = title, subtitle?, version?, w3c-designation, w3c-doctype, pubdate, notice*, publoc, altlocs?, ((prevlocs, latestloc?) | (latestloc, prevlocs?))?, authlist, errataloc?, preverrataloc?, translationloc?, copyright?, ((status, abstract) | (abstract, status)), pubstmt?, sourcedesc?, langusage, revisiondesc pubdate.mdl = day?, month, year # ............................................................... # Entities for common attributes ................................ # ............................................................... # #2000-03-07: maler: Added %argtypes;. # argtypes: # Values for function prototype argument datatypes. argtypes = "boolean" | "expression" | "location-set" | "node-set" | "number" | "object" | "point" | "range" | "string" # key attribute: # Optionally provides a sorting or indexing key, for cases when # the element content is inappropriate for this purpose. key.att = attribute key { text }? # def attribute: # Points to the element where the relevant definition can be # found, using the IDREF mechanism. %def.att; is for optional # def attributes, and %def-req.att; is for required def # attributes. def-req.att = attribute def { xsd:IDREF } # ref attribute: # Points to the element where more information can be found, # using the IDREF mechanism. %ref.att; is for optional # ref attributes, and %ref-req.att; is for required ref # attributes. ref-req.att = attribute ref { xsd:IDREF } # #1998-03-23: maler: Added show and actuate attributes to href. # # Added semi-common xml:space attribute. # #1998-08-22: maler: Used new xlink:form and #IMPLIED features. # #1999-07-02: maler: Reorganized XLink-related entities completely; # # added xmlns:xlink attribute to the mix. # #2000-03-07: maler: Updated XLink usage to February 2000 draft, # # except that href still has no namespace prefix. # xmlns:xlink and xlink:type attributes: # xmlns:xlink declares the association of the xlink prefix # with the namespace created by the XLink specification. # xlink:type identifies an element as an XLink "simple" linking # element. simple-xlink.att = [ a:defaultValue = "simple" ] attribute xlink:type { string "simple" }? # href attributes: # The href attribute locates the remote-resource half of a # simple link; the element on which the href appears is the # local-resource half. Some elements are usable links only if # the author chooses to supply a functional href. The attribute # name should really be xlink:href, but is kept without the # prefix for now in order to be backwards-compatible. href.att = attribute href { text }? href-req.att = attribute href { text } # xlink:show and xlink:actuate attributes: # These attributes offer instructions to the display engine # about how to handle traversal to resource indicated by an # href locator. auto-embed.att = [ a:defaultValue = "embed" ] attribute xlink:show { string "embed" }?, [ a:defaultValue = "onLoad" ] attribute xlink:actuate { string "onLoad" }? user-replace.att = [ a:defaultValue = "replace" ] attribute xlink:show { string "replace" }?, [ a:defaultValue = "onRequest" ] attribute xlink:actuate { string "onRequest" }? user-new.att = [ a:defaultValue = "new" ] attribute xlink:show { string "new" }?, [ a:defaultValue = "onRequest" ] attribute xlink:actuate { string "onRequest" }? # xml:space attribute: # Indicates that the element contains whitespace that the # formatter or other application should retain, as appropriate # to its function. xmlspace.att = [ a:defaultValue = "preserve" ] attribute xml:space { "preserve" }? # #2000-03-07: maler: Added common diff attribute. Made %role.att;. # diff attribute: # Indicates in what way the element has changed. When a value # is not provided, that subelement should inherit a value from # its parent. If the root element has no value supplied, # assume "off". diff.att = attribute diff { "chg" | "add" | "del" | "off" }? # role attribute: # Extends the useful life of the DTD by allowing authors to # make a subtype of any element. No default. role.att = attribute role { xsd:NMTOKEN }? # Common attributes: # Every element has an ID attribute for links, a role # attribute, and a diff attribute. %common.att; is for # common attributes where the ID is optional, and # %common-idreq.att; is for common attributes where the # ID is required. local.common.att = empty common.att = attribute id { xsd:ID }?, role.att, diff.att, local.common.att local.common-idreq.att = empty common-idreq.att = attribute id { xsd:ID }, role.att, diff.att, local.common-idreq.att # ............................................................... # Common elements ............................................... # ............................................................... # head: Title on divisions, productions, and the like head = element head { attlist.head, head.pcd.mix* } attlist.head &= common.att # ............................................................... # Major specification structure ................................. # ............................................................... # #1998-03-10: maler: Made spec content model easily customizable. # #1999-07-02: maler: Added doctype atts and status att. # #2000-03-07: maler: Added cr, issues, and dispcmts to w3c-doctype. spec = element spec { attlist.spec, spec.mdl } # w3c-doctype attributes: # Indicates the type of document, so that the appropriate # stylesheet or workflow routing can be applied. Should # *not* generate any text (such as the "REC-" or "NOTE-" # prefix on the W3C designation content). No default. If # w3c-doctype is "other", other-doctype should be filled in. # # status attribute: # Indicates the stage of review of the document. May affect # the stylesheet's treatment of ednotes (e.g., whether to # output them). No default. local.spec.att = empty attlist.spec &= common.att, local.spec.att, attribute w3c-doctype { "cr" | "dispcmts" | "issues" | "wgnote" | "memsub" | "teamsub" | "note" | "other" | "pr" | "per" | "rec" | "wd" | "review" }?, attribute other-doctype { text }?, attribute status { "int-review" | "ext-review" | "final" }? front = element front { attlist.front, div1+ } attlist.front &= common.att body = element body { attlist.body, div1+ } attlist.body &= common.att # #1997-09-30: maler: Added inform-div1 to back content. back = element back { attlist.back, ((div1+, inform-div1*) | inform-div1+) } attlist.back &= common.att div1 = element div1 { attlist.div1, head, div.mix*, div2* } attlist.div1 &= common.att # #1997-09-30: maler: Added inform-div1 declarations. # #2000-03-07: maler: Added div5 level. # inform-div1: Non-normative division in back matter inform-div1 = element inform-div1 { attlist.inform-div1, head, div.mix*, div2* } attlist.inform-div1 &= common.att div2 = element div2 { attlist.div2, head, div.mix*, div3* } attlist.div2 &= common.att div3 = element div3 { attlist.div3, head, div.mix*, div4* } attlist.div3 &= common.att div4 = element div4 { attlist.div4, head, div.mix*, div5* } attlist.div4 &= common.att div5 = element div5 { attlist.div5, head, div.mix* } attlist.div5 &= common.att # ............................................................... # Specification header .......................................... # ............................................................... # #1998-03-10: maler: Made header content model easily customizable. header = element header { attlist.header, header.mdl } attlist.header &= common.att # Example of title: "Extensible Cheese Language (XCL)" title = element title { attlist.title, (text | phrase)* } attlist.title &= common.att # Example of subtitle: "A Cheesy Specification" subtitle = element subtitle { attlist.subtitle, (text | phrase)* } attlist.subtitle &= common.att # Example of version: "Version 666.0" version = element version { attlist.version, (text | phrase)* } attlist.version &= common.att # Example of w3c-designation: "WD-xcl-19991231" w3c-designation = element w3c-designation { attlist.w3c-designation, (text | phrase)* } attlist.w3c-designation &= common.att # Example of w3c-doctype: "W3C Working Draft" w3c-doctype = element w3c-doctype { attlist.w3c-doctype, (text | phrase)* } attlist.w3c-doctype &= common.att # #1998-03-10: maler: Made pubdate content model easily customizable. pubdate = element pubdate { attlist.pubdate, pubdate.mdl } attlist.pubdate &= common.att day = element day { attlist.day, (text | phrase)* } attlist.day &= common.att month = element month { attlist.month, (text | phrase)* } attlist.month &= common.att year = element year { attlist.year, (text | phrase)* } attlist.year &= common.att # #1999-07-02: maler: Declared copyright element. copyright = element copyright { attlist.copyright, hdr.mix+ } attlist.copyright &= common.att # Example of notice: "This draft is for public comment..." notice = element notice { attlist.notice, hdr.mix+ } attlist.notice &= common.att # #2000-03-07: maler: Broadened models of *loc to %p.pcd.mix;. publoc = element publoc { attlist.publoc, p.pcd.mix* } attlist.publoc &= common.att # #2002-08-15: nwalsh: Added altlocs element. # The semantics of the altlocs are equivalent to the Dublin Core relation element # with type="hasVersion". Each of the loc elements inside altlocs should identify # an alternate version of the resource described by the document, for example # HTML, XML, and PDF forms. altlocs = element altlocs { attlist.altlocs, loc+ } attlist.altlocs &= common.att prevlocs = element prevlocs { attlist.prevlocs, p.pcd.mix* } attlist.prevlocs &= common.att # #2005-10-13: nwalsh: restrict latestloc content model. # New pubrules allows for multiple latestlocs. For some reason, this element # used to allow PCDATA. Now it allows only loc elements. If this causes # trouble, tell Norm. latestloc = element latestloc { attlist.latestloc, loc+ } attlist.latestloc &= common.att errataloc = element errataloc { attlist.errataloc, empty } attlist.errataloc &= common.att, simple-xlink.att, href-req.att preverrataloc = element preverrataloc { attlist.preverrataloc, empty } attlist.preverrataloc &= common.att, simple-xlink.att, href-req.att translationloc = element translationloc { attlist.translationloc, empty } attlist.translationloc &= common.att, simple-xlink.att, href-req.att # loc (defined in "Phrase-level elements" below) authlist = element authlist { attlist.authlist, author+ } attlist.authlist &= common.att # #1997-09-30: maler: Made affiliation optional. # #1998-03-10: maler: Made email optional. author = element author { attlist.author, name, affiliation?, email? } attlist.author &= common.att name = element name { attlist.name, (text | phrase)* } attlist.name &= common.att, key.att affiliation = element affiliation { attlist.affiliation, (text | phrase)* } attlist.affiliation &= common.att # #1999-07-02: maler: Added show/actuate attributes and default values. email = element email { attlist.email, (text | phrase)* } # href attribute: # email functions as a hypertext reference through this # required attribute. Typically the reference would use # the mailto: scheme. E.g.: # # elm@arbortext.com attlist.email &= common.att, simple-xlink.att, href-req.att, user-new.att # #1998-05-15: maler: Changed status content from %statusobj.mix; # # to plain %obj.mix;. statusp is obsolete. status = element status { attlist.status, obj.mix+ } attlist.status &= common.att abstract = element abstract { attlist.abstract, hdr.mix* } attlist.abstract &= common.att pubstmt = element pubstmt { attlist.pubstmt, hdr.mix+ } attlist.pubstmt &= common.att sourcedesc = element sourcedesc { attlist.sourcedesc, hdr.mix+ } attlist.sourcedesc &= common.att langusage = element langusage { attlist.langusage, language+ } attlist.langusage &= common.att language = element language { attlist.language, (text | phrase)* } attlist.language &= common.att revisiondesc = element revisiondesc { attlist.revisiondesc, hdr.mix+ } attlist.revisiondesc &= common.att # ............................................................... # Paragraph ..................................................... # ............................................................... # #1997-09-30: maler: Changed from %obj.mix; to %p.mix;. # #1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix; # # references. # #1997-12-29: maler: Changed order of %statusobj.mix; and # # %statusp.pcd.mix; references. # #1998-05-14: maler: Removed statusp declarations. p = element p { attlist.p, (p.pcd.mix | p.mix)* } attlist.p &= common.att # ............................................................... # Regular lists ................................................. # ............................................................... # ulist: Unordered list, typically bulleted. ulist = element ulist { attlist.ulist, item+ } # spacing attribute: # Use "normal" to get normal vertical spacing for items; # use "compact" to get less spacing. The default is dependent # on the stylesheet. attlist.ulist &= common.att, attribute spacing { "normal" | "compact" }? # olist: Ordered list, typically numbered. olist = element olist { attlist.olist, item+ } # spacing attribute: # Use "normal" to get normal vertical spacing for items; # use "compact" to get less spacing. The default is dependent # on the stylesheet. attlist.olist &= common.att, attribute spacing { "normal" | "compact" }? item = element item { attlist.item, obj.mix+ } attlist.item &= common.att # slist: Simple list, typically with no mark. slist = element slist { attlist.slist, sitem+ } attlist.slist &= common.att sitem = element sitem { attlist.sitem, p.pcd.mix* } attlist.sitem &= common.att # glist: Glossary list, typically two-column. glist = element glist { attlist.glist, gitem+ } attlist.glist &= common.att gitem = element gitem { attlist.gitem, label, def } attlist.gitem &= common.att label = element label { attlist.label, label.pcd.mix* } attlist.label &= common.att def = element def { attlist.def, obj.mix* } attlist.def &= common.att # ............................................................... # Special lists ................................................. # ............................................................... # blist: Bibliography list. blist = element blist { attlist.blist, bibl+ } attlist.blist &= common.att # #1999-07-02: maler: Added show/actuate attributes and default values. bibl = element bibl { attlist.bibl, bibl.pcd.mix* } # href attribute: # bibl optionally functions as a hypertext reference to the # referred-to resource through this attribute. E.g.: # # My Document attlist.bibl &= common.att, simple-xlink.att, href.att, user-replace.att, key.att # orglist: Organization member list. orglist = element orglist { attlist.orglist, member+ } attlist.orglist &= common.att # #1997-09-30: maler: Added optional affiliation. member = element member { attlist.member, name, affiliation?, role? } attlist.member &= common.att # name (defined in "Specification header" above) # affiliation (defined in "Specification header" above) role = element role { attlist.role, (text | phrase)* } attlist.role &= common.att # ............................................................... # Notes ......................................................... # ............................................................... note = element note { attlist.note, obj.mix+ } attlist.note &= common.att # #1998-05-14: maler: Declared issue element. # #2000-03-07: maler: Added head, source, resolution, and status. issue = element issue { attlist.issue, head?, source*, obj.mix+, resolution? } # status attribute: # Indicates whether the issue is open or closed. Note that # the lack of a resolution element does not necessarily mean # that the issue is still open. attlist.issue &= attribute id { xsd:ID }, role.att, diff.att, [ a:defaultValue = "open" ] attribute status { "open" | "closed" }? source = element source { attlist.source, p.pcd.mix* } attlist.source &= common.att resolution = element resolution { attlist.resolution, obj.mix+ } attlist.resolution &= common.att # wfcnote: Well-formedness constraint note. wfcnote = element wfcnote { attlist.wfcnote, head, obj.mix+ } # ID attribute: # wfcnote must have an ID so that it can be pointed to # from a wfc element in a production. attlist.wfcnote &= common-idreq.att # vcnote: Validity constraint note. vcnote = element vcnote { attlist.vcnote, head, obj.mix+ } # ID attribute: # vcnote must have an ID so that it can be pointed to # from a vc element in a production. attlist.vcnote &= common-idreq.att # #1998-05-21: maler: Declared generic constraintnote element. # constraintnote: Generic constraint note. constraintnote = element constraintnote { attlist.constraintnote, head, obj.mix+ } # ID attribute: # constraintnote must have an ID so that it can be # pointed to from a constraint element in a production. # type attribute: # constraintnote must have a type value keyword so that # it can be correctly characterized in the specification. attlist.constraintnote &= common-idreq.att, attribute type { xsd:NMTOKEN } # ............................................................... # Basic display elements ........................................ # ............................................................... # #1998-03-23: maler: Added xml:space attribute. # eg: Example element, with whitespace respected. eg = element eg { attlist.eg, eg.pcd.mix* } attlist.eg &= common.att, xmlspace.att # #2000-03-07: maler: Removed the xml:attributes attribute. # # Added %local.graphic.att;. # graphic: Displayed graphic. Graphic data should be # displayed at the point where it is referenced. Not # actually conforming to XLink right now. graphic = element graphic { attlist.graphic, empty } # source attribute: # The graphic data must reside at the location pointed to. local.graphic.att = empty attlist.graphic &= common.att, simple-xlink.att, attribute source { text }, auto-embed.att, attribute alt { text }?, local.graphic.att # #2000-03-07: maler: Added proto element structure. # proto: Function prototype, in the XPath/XPointer style. proto = element proto { attlist.proto, arg* } local.proto.att = empty attlist.proto &= common.att, local.proto.att, attribute name { xsd:NMTOKEN }, attribute return-type { argtypes } local.arg.att = empty arg = element arg { attlist.arg, empty } attlist.arg &= common.att, local.arg.att, attribute type { argtypes }, attribute occur { "opt" | "req" }? # #2000-03-07: maler: Added example element. example = element example { attlist.example, head?, obj.mix+ } attlist.example &= common.att # ............................................................... # EBNF .......................................................... # ............................................................... # #1997-11-28: maler: Added prodgroup to scrap and defined it. # #1998-05-21: maler: Added constraint to prod. # #1999-07-02: maler: Added prodrecap to scrap; broadened scrap model. # # Added headstyle attribute to scrap. # scrap: Collection of EBNF language productions. scrap = element scrap { attlist.scrap, head, (prodgroup | prod | bnf | prodrecap)+ } # lang attribute: # The scrap can link to a description of the language used, # found in a language element in the header. # headstyle attribute: # Allows a scrap title to be suppressed from output. To be # used only when a scrap title directly next to a section # title is distracting or repetetive. attlist.scrap &= common.att, attribute lang { xsd:IDREF }?, [ a:defaultValue = "show" ] attribute headstyle { "show" | "suppress" }? # prodgroup: Sub-collection of productions, needed for # formatting reasons. prodgroup = element prodgroup { attlist.prodgroup, prod+ } # pcw attributes: # Presentational attributes to control the width # of the "pseudo-table" columns used to output # groups of productions. attlist.prodgroup &= common.att, attribute pcw1 { text }?, attribute pcw2 { text }?, attribute pcw3 { text }?, attribute pcw4 { text }?, attribute pcw5 { text }? # prod: EBNF language production. prod = element prod { attlist.prod, lhs, (rhs, (com | wfc | vc | constraint)*)+ } # ID attribute: # The production must have an ID so that cross-references # (specref) and mentions of nonterminals (nt) can link to # it. attlist.prod &= common-idreq.att, attribute num { text }? # lhs: Left-hand side of production. lhs = element lhs { attlist.lhs, (text | phrase)* } attlist.lhs &= common.att # rhs: Right-hand side of production; may have many # "right-hand sides," one to a line. rhs = element rhs { attlist.rhs, (text | phrase | nt | xnt | com)* } attlist.rhs &= common.att # nt and xnt (defined in "Phrase-level elements" below) # #1997-11-28: maler: Added loc and bibref to com content. # com: Production comment. com = element com { attlist.com, (text | phrase | loc | bibref)* } attlist.com &= common.att # wfc: Reference to a well-formedness constraint; should # generate the head of the wfcnote pointed to. wfc = element wfc { attlist.wfc, empty } # def attribute: # Each well formedness tagline in a production must link to the # wfcnote that defines it. attlist.wfc &= def-req.att, common.att # vc: Reference to a validity constraint; should generate # the head of the vcnote pointed to. vc = element vc { attlist.vc, empty } # def attribute: # Each validity tagline in a production must link to the vcnote # that defines it. attlist.vc &= def-req.att, common.att # #1998-05-21: maler: Declared generic constraint element. # constraint: Reference to a generic constraint; should # generate the head of the constraintnote pointed to. constraint = element constraint { attlist.constraint, empty } # def attribute: # Each constraint tagline in a production must link to the # constraint note that defines it. attlist.constraint &= def-req.att, common.att # #1998-03-23: maler: Added xml:space attribute. # bnf: Un-marked-up EBNF production, with whitespace # respected. bnf = element bnf { attlist.bnf, eg.pcd.mix* } attlist.bnf &= common.att, xmlspace.att # #1999-07-02: maler: Declared prodrecap. # prodrecap: Reference to production or bnf that appears # in its "normative" form elsewhere in the spec; should # generate a copy of the original production, without # a production number next to it. prodrecap = element prodrecap { attlist.prodrecap, empty } attlist.prodrecap &= common.att, ref-req.att # ............................................................... # Table ......................................................... # ............................................................... # #1997-10-16: maler: Added table mechanism. # #1997-11-28: maler: Added non-null system ID to entity declaration. # # Added HTML table module. # #1997-12-29: maler: IGNOREd SGML Open table model. # #1998-03-10: maler: Removed SGML Open table model. # # Merged html-tbl.mod file into main file. # # Added %common.att; to all HTML table elements. # #1998-05-14: maler: Replaced table model with full HTML 4.0 model. # # Removed htable in favor of table. # # Removed htbody in favor of tbody. cellhalign.att = attribute align { "left" | "center" | "right" | "justify" | "char" }?, attribute char { text }?, attribute charoff { text }? cellvalign.att = attribute valign { "top" | "middle" | "bottom" | "baseline" }? thtd.att = attribute abbr { text }?, attribute axis { text }?, attribute headers { xsd:IDREFS }?, attribute scope { "row" | "col" | "rowgroup" | "colgroup" }?, [ a:defaultValue = "1" ] attribute rowspan { xsd:NMTOKEN }?, [ a:defaultValue = "1" ] attribute colspan { xsd:NMTOKEN }? width.att = attribute width { text }? span.att = [ a:defaultValue = "1" ] attribute span { xsd:NMTOKEN }? # table: HTML-based geometric table model. table = element table { attlist.table, caption?, (col* | colgroup*), thead?, tfoot?, tbody+ } attlist.table &= common.att, width.att, attribute summary { text }?, attribute border { text }?, attribute frame { "void" | "above" | "below" | "hsides" | "lhs" | "rhs" | "vsides" | "box" | "border" }?, attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?, attribute cellspacing { text }?, attribute cellpadding { text }? caption = element caption { attlist.caption, p.pcd.mix* } attlist.caption &= common.att col = element col { attlist.col, empty } attlist.col &= common.att, span.att, width.att, cellhalign.att, cellvalign.att colgroup = element colgroup { attlist.colgroup, col* } attlist.colgroup &= common.att, span.att, width.att, cellhalign.att, cellvalign.att thead = element thead { attlist.thead, tr+ } attlist.thead &= common.att, cellhalign.att, cellvalign.att tfoot = element tfoot { attlist.tfoot, tr+ } attlist.tfoot &= common.att, cellhalign.att, cellvalign.att tbody = element tbody { attlist.tbody, tr+ } attlist.tbody &= common.att, cellhalign.att, cellvalign.att tr = element tr { attlist.tr, (th | td)+ } attlist.tr &= common.att, cellhalign.att, cellvalign.att th = element th { attlist.th, (p.pcd.mix | p.mix)* } attlist.th &= common.att, thtd.att, cellhalign.att, cellvalign.att td = element td { attlist.td, (p.pcd.mix | p.mix)* } attlist.td &= common.att, thtd.att, cellhalign.att, cellvalign.att # ............................................................... # IDL structures for DOM specifications ......................... # ............................................................... # ............................................................... # Specialized entities for classes .............................. idl-desc.class = p | note idl-tdef.class = typedef | constant | exception | reference | group idl-mod.class = module | interface idl-struct.class = struct | enum | sequence | union | typename idl-meth.class = method | \attribute # ............................................................... # Specialized entities for mixtures ............................. # Quick reference to content model mixtures: # # desc tdef mod struct meth # group x x x x x # definitions, module x x x # interface x x x # typedef, case, component x idl-grp.mix = idl-desc.class | idl-tdef.class | idl-mod.class | idl-struct.class | idl-meth.class idl-defn.mix = idl-desc.class | idl-tdef.class | idl-mod.class idl-intfc.mix = idl-desc.class | idl-tdef.class | idl-meth.class idl-type.mix = idl-struct.class # ............................................................... # Specialized entities for common attributes .................... # name attribute: # Provides a name. Required. idl-name.att = attribute name { text } # type attribute: # Provides a type. Required. idl-type.att = attribute type { text } # ............................................................... # Common IDL element ............................................ descr = element descr { attlist.descr, obj.mix* } attlist.descr &= common.att # ............................................................... # IDL definition elements ....................................... # definitions: Top-level element for definitions. definitions = element definitions { attlist.definitions, idl-defn.mix+ } attlist.definitions &= common.att # group: Element used to group a set of definitions. group = element group { attlist.group, descr, idl-grp.mix* } attlist.group &= common.att, idl-name.att # interface: Definition of an interface. interface = element interface { attlist.interface, descr, idl-intfc.mix* } attlist.interface &= common.att, idl-name.att, attribute inherits { text }? # module: Definition of a module. module = element module { attlist.module, descr, idl-defn.mix* } attlist.module &= common.att, idl-name.att # reference: Reference to some other declaration. reference = element reference { attlist.reference, empty } attlist.reference &= common.att, attribute declaration { xsd:IDREF } # typedef: Definition of a named type. typedef = element typedef { attlist.typedef, descr, idl-type.mix } attlist.typedef &= common.att, idl-name.att, attribute array.size { xsd:NMTOKEN }? # struct: Declaration of a struct type. struct = element struct { attlist.struct, descr, component+ } attlist.struct &= common.att, idl-name.att # component: Declaration of a structural member. component = element component { attlist.component, idl-type.mix } attlist.component &= common.att, idl-name.att # union: Declaration of a union type. union = element union { attlist.union, descr, case+ } attlist.union &= common.att, idl-name.att, attribute switch.type { text } case = element case { attlist.case, descr, idl-type.mix } attlist.case &= common.att, attribute labels { text } # enum: Declaration of an enum type. enum = element enum { attlist.enum, descr, enumerator+ } attlist.enum &= common.att, idl-name.att enumerator = element enumerator { attlist.enumerator, descr } attlist.enumerator &= common.att, idl-name.att # sequence: Declaration of a sequence type (not named). sequence = element sequence { attlist.sequence, sequence* } attlist.sequence &= common.att, idl-type.att, attribute size { xsd:NMTOKEN }? # constant: Declaration of a named constant. constant = element constant { attlist.constant, descr } attlist.constant &= common.att, idl-name.att, idl-type.att, attribute value { text } # exception: Declaration of an exception. exception = element exception { attlist.exception, descr, component* } attlist.exception &= common.att, idl-name.att # component (defined under struct, above) # attribute: Declaration of an attribute (data member). \attribute = element attribute { attlist.attribute, descr } attlist.attribute &= common.att, idl-name.att, idl-type.att, [ a:defaultValue = "no" ] attribute readonly { "yes" | "no" }? # method: Declaration of a method. method = element method { attlist.method, descr, parameters, returns, raises } attlist.method &= common.att, idl-name.att parameters = element parameters { attlist.parameters, param* } attlist.parameters &= common.att param = element param { attlist.param, descr } attlist.param &= common.att, idl-name.att, idl-type.att, [ a:defaultValue = "inout" ] attribute attr { "in" | "out" | "inout" }? returns = element returns { attlist.returns, descr } attlist.returns &= common.att, idl-type.att raises = element raises { attlist.raises, exception* } attlist.raises &= empty # exception (defined under constant, above) typename = element typename { attlist.typename, (text | phrase)* } attlist.typename &= common.att # ............................................................... # Phrase-level elements ......................................... # ............................................................... # #2000-03-07: maler: Added att and attval elements. # att: Attribute name. att = element att { attlist.att, tech.pcd.mix* } attlist.att &= common.att # attval: Attribute value. attval = element attval { attlist.attval, tech.pcd.mix* } attlist.attval &= common.att # bibref: Reference to a bibliography list entry; should # generate, in square brackets, "key" on bibl. bibref = element bibref { attlist.bibref, empty } # ref attribute: # A bibliography reference must link to the bibl element that # describes the resource. attlist.bibref &= common.att, ref-req.att code = element code { attlist.code, tech.pcd.mix* } attlist.code &= common.att # #1998-03-10: maler: Declared ednote and related elements. # #1999-07-02: maler: Changed edtext content from #PCDATA to %p.pcd.mix;. # ednote: Editorial note for communication among editors. ednote = element ednote { attlist.ednote, name?, date?, edtext } attlist.ednote &= common.att date = element date { attlist.date, (text | phrase)* } attlist.date &= common.att edtext = element edtext { attlist.edtext, p.pcd.mix* } attlist.edtext &= common.att # #2000-03-07: maler: Added el element. # el: Element type name (GI). el = element el { attlist.el, tech.pcd.mix* } attlist.el &= common.att # #2000-03-07: maler: Expanded emph to %p.pcd.mix;. emph = element emph { attlist.emph, p.pcd.mix* } attlist.emph &= common.att # footnote: Both footnote content and call to footnote. footnote = element footnote { attlist.footnote, obj.mix+ } attlist.footnote &= common.att # #2000-03-07: maler: Added function and gave it content of # # %tech.pcd.mix; instead of XPath's #PCDATA. function = element function { attlist.function, tech.pcd.mix* } attlist.function &= common.att kw = element kw { attlist.kw, tech.pcd.mix* } attlist.kw &= common.att # #1999-07-02: maler: Added show/actuate attributes and default values. # loc: Generic link to a Web resource, similar to HTML's A. loc = element loc { attlist.loc, (text | phrase)* } # href attribute: # The purpose of a loc element is to function as a A-like # hypertext link to a resource. (Ideally, the content of loc # will also mention the URI of the resource, so that readers of # the printed version will be able to locate the resource.) E.g.: # # http://www.my.com/doc.htm attlist.loc &= common.att, simple-xlink.att, href-req.att, user-replace.att # nt: Mention of a nonterminal in text, along with a link to # the production in the current document that defines it. nt = element nt { attlist.nt, (text | phrase)* } # def attribute: # The nonterminal must link to the production that defines # it. attlist.nt &= common.att, def-req.att # #2000-03-07: maler: Declared phrase. # phrase: "Attribute hanger" for small bits of (e.g.) differenced # text in a paragraph or similar, when another element isn't handy. # Beware that its content model may allow more nested elements than # would normally be allowed in some contexts. phrase = element phrase { attlist.phrase, p.pcd.mix* } attlist.phrase &= common.att # #2003-06-25: nwalsh: RFC2119 elements rfc2119 = element rfc2119 { attlist.rfc2119, (text | phrase)* } attlist.rfc2119 &= common.att # #1998-03-10: maler: Declared quote. # quote: Scare quotes and other purely presentational quotes. quote = element quote { attlist.quote, p.pcd.mix* } attlist.quote &= common.att # specref: Reference to a div, olist item, prod, or issue # in the current document; should generate italic "[n.n], # Section Title" for div, "n" for numbered item, "[n]" for # production, or "Issue id" for issue. specref = element specref { attlist.specref, empty } # ref attribute: # The purpose of a specref element is to link to a div, item # in an olist, or production in the current spec. attlist.specref &= common.att, ref-req.att # #2000-03-07: maler: Added sub and sup. # sub: Subscript. sub = element sub { attlist.sub, (text | phrase)* } attlist.sub &= common.att # sup: Superscript. sup = element sup { attlist.sup, (text | phrase)* } attlist.sup &= common.att # term: The term in text that is being defined in text. term = element term { attlist.term, (text | phrase)* } attlist.term &= common.att # termdef: Definition of a term in text. termdef = element termdef { attlist.termdef, (termdef.pcd.mix | termdef.mix)* } # ID attribute: # A term definition must have an ID so that it can be linked # to from termref elements. # term attribute: # The canonical form of the term or phrase being defined must # appear in this attribute, even if the term or phrase also # appears in the element content in identical form (e.g., in # the term element). attlist.termdef &= common-idreq.att, attribute term { text } # termref: Mention of a term, along with a link to the # definition in the current document. termref = element termref { attlist.termref, (text | phrase)* } # ref attribute: # A term reference must link to the termdef element that # defines the term. attlist.termref &= common.att, def-req.att # #1999-07-02: maler: Added show/actuate attributes and default values. # titleref: Citation of another document, which can also # link to that document if it is a Web resource. titleref = element titleref { attlist.titleref, (text | phrase)* } # href attribute: # A title reference can optionally function as a hypertext # link to the resource with this title. E.g.: # # http://www.my.com/doc.htm attlist.titleref &= common.att, simple-xlink.att, href.att, user-new.att # #2000-03-07: maler: Added var. # var: String standing for a variable value that the user # or system will supply. For example: "For each node # x in this node-set..." var = element var { attlist.var, tech.pcd.mix* } attlist.var &= common.att # #1999-07-02: maler: Added show/actuate attributes and default values. # xnt: Mention of a nonterminal in text, along with a link to # the production in another document that defines it. xnt = element xnt { attlist.xnt, (text | phrase)* } # href attribute: # The nonterminal must hyperlink to a resource that serves # to define it (e.g., a production in a related XML # specification). E.g.: # # Name attlist.xnt &= common.att, simple-xlink.att, href-req.att, user-new.att # #1997-12-29: maler: Declared xspecref. # #1999-07-02: maler: Added show/actuate attributes and default values. # xspecref: Reference to a div, olist item, prod, or issue # in a related specification document; should generate # no special text. xspecref = element xspecref { attlist.xspecref, (text | phrase)* } # href attribute: # The spec reference must hyperlink to the resource to # cross-refer to (e.g., a section in a related XML # specification). E.g.: # # # the section on constraints attlist.xspecref &= common.att, simple-xlink.att, href-req.att, user-new.att # #1999-07-02: maler: Added show/actuate attributes and default values. # termref: Mention of a term, along with a link to the # definition in a related document. xtermref = element xtermref { attlist.xtermref, (text | phrase)* } # href attribute: # The term reference must hyperlink to the resource that # serves to define the term (e.g., a term definition in # a related XML specification). E.g.: # # # entity # attlist.xtermref &= common.att, simple-xlink.att, href-req.att, user-new.att # ............................................................... # Unused elements for ADEPT ..................................... # ............................................................... # #1997-09-30: maler: Added unusued elements. # #1997-10-14: maler: Fixed div to move nested div to the mixture. # #1998-05-14: maler: Added key-term, htable, and htbody. # #1998-11-30: maler: Added para, listitem, itemizedlist, and orderedlist. # The following elements are purposely declared but never # referenced. Declaring them allows them to be pasted from # an HTML document, an earlier version of an XMLspec document, # or a DocBook document into a document using this DTD in ADEPT. # The ATD Context Transformation mechanism will try to convert # them to the appropriate element for this DTD. While this # conversion will not work for all fragments, it does allow many # cases to work reasonably well. \div = element div { attlist.div, head?, (div.mix | ul | ol | h1 | h2 | h3 | h4 | h5 | h6 | \div)* } attlist.div &= empty h1 = element h1 { attlist.h1, (head.pcd.mix | em | a)* } attlist.h1 &= empty h2 = element h2 { attlist.h2, (head.pcd.mix | em | a)* } attlist.h2 &= empty h3 = element h3 { attlist.h3, (head.pcd.mix | em | a)* } attlist.h3 &= empty h4 = element h4 { attlist.h4, (head.pcd.mix | em | a)* } attlist.h4 &= empty h5 = element h5 { attlist.h5, (head.pcd.mix | em | a)* } attlist.h5 &= empty h6 = element h6 { attlist.h6, (head.pcd.mix | em | a)* } attlist.h6 &= empty pre = element pre { attlist.pre, (eg.pcd.mix | em)* } attlist.pre &= empty ul = element ul { attlist.ul, (item | li)* } attlist.ul &= empty ol = element ol { attlist.ol, (item | li)* } attlist.ol &= empty li = element li { attlist.li, (text | obj.mix)* } attlist.li &= empty em = element em { attlist.em, text* } attlist.em &= empty a = element a { attlist.a, text* } attlist.a &= empty key-term = element key-term { attlist.key-term, text* } attlist.key-term &= empty htable = element htable { attlist.htable, caption?, (col* | colgroup*), thead?, tfoot?, tbody+ } attlist.htable &= empty htbody = element htbody { attlist.htbody, tr+ } attlist.htbody &= empty statusp = element statusp { attlist.statusp, (p.pcd.mix | p.mix)* } attlist.statusp &= empty itemizedlist = element itemizedlist { attlist.itemizedlist, listitem* } attlist.itemizedlist &= empty orderedlist = element orderedlist { attlist.orderedlist, listitem* } attlist.orderedlist &= empty listitem = element listitem { attlist.listitem, para* } attlist.listitem &= empty para = element para { attlist.para, text* } attlist.para &= empty start = itemizedlist | htable | htbody | spec | pre | orderedlist | key-term | statusp # ............................................................... # Change history ................................................ # ............................................................... # #This revision history is no longer being maintained. See the CVS log # #for detailed revisions history. # ##################################################################### # #1997-08-18: maler # #- Did a major revision. # #1997-09-10: maler # #- Updated FPI. # #- Removed namekey element and put key attribute on name element. # #- Made statusp element and supporting entities. # #- Added slist element with sitem+ content. # #- Required head on scrap and added new bnf subelement. # #- Added an xnt element and allowed it and nt in regular text and rhs. # #- Removed the ntref element. # #- Added back the com element to the content of rhs. # #- Added a key attribute to bibl. # #- Removed the ident element. # #- Added a term element to be used inside termdef. # #- Added an xtermref element parallel to termref. # #- Beefed up DTD comments. # #1997-09-12: maler # #- Allowed term element in general text. # #- Changed bibref to EMPTY. # #- Added ref.class to termdef.pcd.mix. # #1997-09-14: maler # #- Changed main attribute of xtermref from def to href. # #- Added termdef.class to label contents. # #1997-09-30: maler # #- Added character entity module and added new entities. # #- Removed p from appearing directly in self; created %p.mix;. # #- Added inform-div (non-normative division) element. # #- Fixed xtermref comment to mention href, not ref. # #- Extended orglist model to allow optional affiliation. # #- Modified author to make affiliation optional. # #- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;. # #- Added %note.class; and %illus.class; to %termdef.pcd.mix;. # #- Added unused HTML elements. # #- Put empty system ID next to public ID in entity declarations. # #1997-10-14: maler # #- Fixed "unused" div content model to move nested div to mixture. # #1997-10-16: maler # #- Added SGML Open Exchange tables. # #1997-11-28: maler # #- Added support for prodgroup and its attributes. # #- Added support for HTML tables. # #- Added loc and bibref to content of com. # #- Added loc to general p content models. # #- Allowed p as alternative to statusp in status. # #- Added non-null system IDs to external parameter entity declarations. # #- (Modified the SGML Open table module to make it XML-compliant.) # #- (Modified the character entity module.) # #1997-12-29: maler # #- Moved #PCDATA occurrences to come before GIs in content models. # #- Removed use of the SGML Open table module. # #- Added xspecref element. # #- Ensured that all FPIs contain 4-digit year. # #- (Modified the character entity module.) # #1998-03-10: maler # #- Merged the character entity and table modules into the main file. # #- Added ldquo and rdquo entities. # #- Added common attributes to prodgroup. # #- Made the email element in header optional. # #- Removed reference to the SGML Open table model. # #- Added ednote element. # #- Added quote element. # #- Updated XLink usage to reflect 3 March 1998 WD. # #- Added "local" entities to the class entities for customization. # #- Parameterized several content models to allow for customization. # #1998-03-23: maler # #- Cleaned up some comments and removed some others. # #- Added xml:space semi-common attribute to eg and bnf elements. # #- Added show and embed attributes on all the uses of href. # #- Added %common.att; to all HTML table elements. # #- Added a real URI to the "typical invocation" comment. # #1998-05-14: maler # #- Fixed mdash, ldquo, and rdquo character entities. # #- Switched to the full HTML 4.0 table model. # #- Removed htable/htbody elements and replaced them with table/tbody. # #- Added issue element to %note.class; and declared it. # #- Allowed prevlocs and latestloc in either order. # #- Added key-term, htable, htbody, and statusp as unused elements. # #- Removed real statusp element in favor of plain p. # #1998-05-21: maler # #- Declared generic constraint and constraintnote elements. # #- Added constraintnote to %note.class;. # #- Added constraint to %eg.pcd.mix; and prod content model. # #1998-08-22: maler # #- Fixed %illus.class; to mention table instead of htable. # #- Added definitions to %illus.class; for DOM model. # #- Added DOM definitions element and its substructure. # #- Updated XLink usage in %href.att; to use xlink:form and #IMPLIED. # #- Added clarifying comments to href-using elements. # #1998-11-30: maler # #- Added new unused elements to support DocBook translation. # #- Updated maler phone numbers. # #1998-12-3: maler # #- Fixed character entities with respect to escaping of ampersands. # #- Added many more explanatory comments. # #1999-07-02: maler # #- Added %loc.class; to all PCD mixes that didn't already have it. # #- Removed unused %loc.pcd.mix;. # #- Made version in spec header optional. # #- Added three new attributes to spec. # #- Broadened content of edtext. # #- Added optional copyright element to header. # #- Reorganized XLink-related parameter entities; added xmlns:xlink. # #- Changed edtext content from #PCDATA to %p.pcd.mix;. # #- Added show/actuate atts and default values to all href elements. # #- Changed versioning scheme from 8-digit dates to version numbers. # #- Added w3c-doctype, other-doctype, status atts to spec element. # #- Added prodrecap element inside scrap. # #- Added headstyle attribute to scrap. # #2000-03-07: maler # #- Added proto element, its arg subelement, and the %argtypes; entity. # #- Added function, var, sub, sup, phrase, el, att, attval elements. # #- Expanded emph to %p.pcd.mix;. # #- Allowed status and abstract to appear in the opposite order. # #- Updated XLink usage to the latest WD, except for href and source. # #- Removed the xml:attributes attribute from graphic. # #- Added %local.graphic.att; to graphic. # #- Added common diff attribute. # #- Added div5 element. # #- Broadened content models of publoc, prevlocs, and latestloc. # #- Added head, source, resolution, and status attribute to issue. # #- Added cr, issues, and dispcmts to w3c-doctype attribute on spec. # #- Added example element. # ............................................................... # End of XML specification DTD .................................. # ...............................................................