1 | # revised DTD for the RFC document series, draft of 2008-02-01
|
---|
2 |
|
---|
3 | # Contents
|
---|
4 | #
|
---|
5 | # DTD data types
|
---|
6 | #
|
---|
7 | # The top-level
|
---|
8 | #
|
---|
9 | # Front matter
|
---|
10 | #
|
---|
11 | # The Body
|
---|
12 | #
|
---|
13 | # Back matter
|
---|
14 |
|
---|
15 | # DTD data types:
|
---|
16 | #
|
---|
17 | # entity description
|
---|
18 | # ====== ===============================================
|
---|
19 | # NUMBER [0-9]+
|
---|
20 | # NUMBERS a comma-separated list of NUMBER
|
---|
21 | #
|
---|
22 | # DAY the day of the month, e.g., "1"
|
---|
23 | # MONTH the month of the year, e.g., "January"
|
---|
24 | # YEAR a four-digit year, e.g., "1999"
|
---|
25 | #
|
---|
26 | # URI e.g., "http://invisible.net/"
|
---|
27 | #
|
---|
28 | # ATEXT/CTEXT printable ASCII text (no line-terminators)
|
---|
29 | #
|
---|
30 | # TEXT character data
|
---|
31 |
|
---|
32 | namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
|
---|
33 |
|
---|
34 | NUMBER = string
|
---|
35 | NUMBERS = string
|
---|
36 | DAY = string
|
---|
37 | MONTH = string
|
---|
38 | YEAR = string
|
---|
39 | URI = string
|
---|
40 | ATEXT = string
|
---|
41 | CTEXT = text
|
---|
42 | TEXT = text
|
---|
43 | # The top-level
|
---|
44 |
|
---|
45 | # attributes for the "rfc" element are supplied by the RFC
|
---|
46 | # editor. when preparing drafts, authors should leave them blank.
|
---|
47 | #
|
---|
48 | # the "seriesNo" attribute is used if the category is, e.g., BCP.
|
---|
49 | rfc = element rfc { attlist.rfc, front, middle, back? }
|
---|
50 | attlist.rfc &=
|
---|
51 | attribute number { NUMBER }?,
|
---|
52 | [ a:defaultValue = "" ] attribute obsoletes { NUMBERS }?,
|
---|
53 | [ a:defaultValue = "" ] attribute updates { NUMBERS }?,
|
---|
54 | [ a:defaultValue = "info" ] attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?,
|
---|
55 | attribute seriesNo { NUMBER }?,
|
---|
56 | attribute ipr {
|
---|
57 | "full2026"
|
---|
58 | | "noDerivativeWorks2026"
|
---|
59 | | "none"
|
---|
60 | | "full3667"
|
---|
61 | | "noModification3667"
|
---|
62 | | "noDerivatives3667"
|
---|
63 | | "full3978"
|
---|
64 | | "noModification3978"
|
---|
65 | | "noDerivatives3978"
|
---|
66 | | "trust200811"
|
---|
67 | | "noModificationTrust200811"
|
---|
68 | | "noDerivativesTrust200811"
|
---|
69 | }?,
|
---|
70 | attribute iprExtract { xsd:IDREF }?,
|
---|
71 | attribute submissionType { "IETF" | "independent" }?,
|
---|
72 | attribute docName { ATEXT }?,
|
---|
73 | [ a:defaultValue = "en" ] attribute xml:lang { ATEXT }?
|
---|
74 | # Front matter
|
---|
75 | front =
|
---|
76 | element front {
|
---|
77 | attlist.front,
|
---|
78 | title,
|
---|
79 | author+,
|
---|
80 | date,
|
---|
81 | area*,
|
---|
82 | workgroup*,
|
---|
83 | keyword*,
|
---|
84 | abstract?,
|
---|
85 | note*
|
---|
86 | }
|
---|
87 | attlist.front &= empty
|
---|
88 | # the "abbrev" attribute is used for headers, etc.
|
---|
89 | title = element title { attlist.title, CTEXT }
|
---|
90 | attlist.title &= attribute abbrev { ATEXT }?
|
---|
91 | author = element author { attlist.author, organization, address? }
|
---|
92 | attlist.author &=
|
---|
93 | attribute initials { ATEXT }?,
|
---|
94 | attribute surname { ATEXT }?,
|
---|
95 | attribute fullname { ATEXT }?,
|
---|
96 | attribute role { "editor" }?
|
---|
97 | organization = element organization { attlist.organization, CTEXT }
|
---|
98 | attlist.organization &= attribute abbrev { ATEXT }?
|
---|
99 | address =
|
---|
100 | element address {
|
---|
101 | attlist.address, postal?, phone?, facsimile?, email?, uri?
|
---|
102 | }
|
---|
103 | attlist.address &= empty
|
---|
104 | # this content model should be more strict:
|
---|
105 | # at most one of each the city, region, code, and country
|
---|
106 | # elements may be present
|
---|
107 | postal =
|
---|
108 | element postal {
|
---|
109 | attlist.postal, street+, (city | region | code | country)*
|
---|
110 | }
|
---|
111 | attlist.postal &= empty
|
---|
112 | street = element street { attlist.street, CTEXT }
|
---|
113 | attlist.street &= empty
|
---|
114 | city = element city { attlist.city, CTEXT }
|
---|
115 | attlist.city &= empty
|
---|
116 | region = element region { attlist.region, CTEXT }
|
---|
117 | attlist.region &= empty
|
---|
118 | code = element code { attlist.code, CTEXT }
|
---|
119 | attlist.code &= empty
|
---|
120 | country = element country { attlist.country, CTEXT }
|
---|
121 | attlist.country &= empty
|
---|
122 | phone = element phone { attlist.phone, CTEXT }
|
---|
123 | attlist.phone &= empty
|
---|
124 | facsimile = element facsimile { attlist.facsimile, CTEXT }
|
---|
125 | attlist.facsimile &= empty
|
---|
126 | email = element email { attlist.email, CTEXT }
|
---|
127 | attlist.email &= empty
|
---|
128 | uri = element uri { attlist.uri, CTEXT }
|
---|
129 | attlist.uri &= empty
|
---|
130 | date = element date { attlist.date, empty }
|
---|
131 | attlist.date &=
|
---|
132 | attribute day { DAY }?,
|
---|
133 | attribute month { MONTH }?,
|
---|
134 | attribute year { YEAR }?
|
---|
135 | # meta-data...
|
---|
136 | area = element area { attlist.area, CTEXT }
|
---|
137 | attlist.area &= empty
|
---|
138 | workgroup = element workgroup { attlist.workgroup, CTEXT }
|
---|
139 | attlist.workgroup &= empty
|
---|
140 | keyword = element keyword { attlist.keyword, CTEXT }
|
---|
141 | attlist.keyword &= empty
|
---|
142 | abstract = element abstract { attlist.abstract, t+ }
|
---|
143 | attlist.abstract &= empty
|
---|
144 | note = element note { attlist.note, t+ }
|
---|
145 | attlist.note &= attribute title { ATEXT }
|
---|
146 | # The body
|
---|
147 |
|
---|
148 | middle = element middle { attlist.middle, section+ }
|
---|
149 | attlist.middle &= empty
|
---|
150 | section =
|
---|
151 | element section {
|
---|
152 | attlist.section, ((t | figure | texttable | iref)* , section*)
|
---|
153 | }
|
---|
154 | attlist.section &=
|
---|
155 | attribute anchor { xsd:ID }?,
|
---|
156 | attribute title { ATEXT },
|
---|
157 | [ a:defaultValue = "default" ] attribute toc { "include" | "exclude" | "default" }?
|
---|
158 | # use of <appendix/> is deprecated...
|
---|
159 | # <!ELEMENT appendix ((t|figure|texttable|iref)*,appendix*)>
|
---|
160 | # <!ATTLIST appendix
|
---|
161 | # anchor ID #IMPLIED
|
---|
162 | # title %ATEXT; #REQUIRED
|
---|
163 | # toc (include|exclude|default)
|
---|
164 | # "default">
|
---|
165 |
|
---|
166 | # use of <figure/> is deprecated...
|
---|
167 | t =
|
---|
168 | element t {
|
---|
169 | attlist.t,
|
---|
170 | (TEXT
|
---|
171 | | \list
|
---|
172 | | figure
|
---|
173 | | xref
|
---|
174 | | eref
|
---|
175 | | iref
|
---|
176 | | cref
|
---|
177 | | spanx
|
---|
178 | | vspace)*
|
---|
179 | }
|
---|
180 | attlist.t &= attribute anchor { xsd:ID }?, attribute hangText { ATEXT }?
|
---|
181 | # the value of the style attribute is inherited from the closest
|
---|
182 | # parent
|
---|
183 | \list = element list { attlist.list, t+ }
|
---|
184 | attlist.list &=
|
---|
185 | attribute style { ATEXT }?,
|
---|
186 | attribute hangIndent { NUMBER }?,
|
---|
187 | attribute counter { ATEXT }?
|
---|
188 | xref = element xref { attlist.xref, CTEXT }
|
---|
189 | attlist.xref &=
|
---|
190 | attribute target { xsd:IDREF },
|
---|
191 | [ a:defaultValue = "false" ] attribute pageno { "true" | "false" }?,
|
---|
192 | [ a:defaultValue = "default" ] attribute format { "counter" | "title" | "none" | "default" }?
|
---|
193 | eref = element eref { attlist.eref, CTEXT }
|
---|
194 | attlist.eref &= attribute target { URI }
|
---|
195 | iref = element iref { attlist.iref, empty }
|
---|
196 | attlist.iref &=
|
---|
197 | attribute item { ATEXT },
|
---|
198 | [ a:defaultValue = "" ] attribute subitem { ATEXT }?,
|
---|
199 | [ a:defaultValue = "false" ] attribute primary { "true" | "false" }?
|
---|
200 | cref = element cref { attlist.cref, CTEXT }
|
---|
201 | attlist.cref &=
|
---|
202 | attribute anchor { xsd:ID }?,
|
---|
203 | attribute source { ATEXT }?
|
---|
204 | spanx = element spanx { attlist.spanx, CTEXT }
|
---|
205 | attlist.spanx &=
|
---|
206 | [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?,
|
---|
207 | [ a:defaultValue = "emph" ] attribute style { ATEXT }?
|
---|
208 | vspace = element vspace { attlist.vspace, empty }
|
---|
209 | attlist.vspace &=
|
---|
210 | [ a:defaultValue = "0" ] attribute blankLines { NUMBER }?
|
---|
211 | figure =
|
---|
212 | element figure { attlist.figure, iref*, preamble?, artwork, postamble? }
|
---|
213 | attlist.figure &=
|
---|
214 | attribute anchor { xsd:ID }?,
|
---|
215 | [ a:defaultValue = "" ] attribute title { ATEXT }?,
|
---|
216 | [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?,
|
---|
217 | [ a:defaultValue = "" ] attribute src { ATEXT }?,
|
---|
218 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?,
|
---|
219 | [ a:defaultValue = "" ] attribute alt { ATEXT }?,
|
---|
220 | [ a:defaultValue = "" ] attribute width { NUMBER }?,
|
---|
221 | [ a:defaultValue = "" ] attribute height { NUMBER }?
|
---|
222 | preamble =
|
---|
223 | element preamble {
|
---|
224 | attlist.preamble, (TEXT | xref | eref | iref | cref | spanx)*
|
---|
225 | }
|
---|
226 | attlist.preamble &= empty
|
---|
227 | artwork = element artwork { attlist.artwork, TEXT* }
|
---|
228 | attlist.artwork &=
|
---|
229 | [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?,
|
---|
230 | [ a:defaultValue = "" ] attribute name { ATEXT }?,
|
---|
231 | [ a:defaultValue = "" ] attribute type { ATEXT }?,
|
---|
232 | attribute src { URI }?,
|
---|
233 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?,
|
---|
234 | [ a:defaultValue = "" ] attribute alt { ATEXT }?,
|
---|
235 | [ a:defaultValue = "" ] attribute width { ATEXT }?,
|
---|
236 | [ a:defaultValue = "" ] attribute height { ATEXT }?
|
---|
237 | postamble =
|
---|
238 | element postamble {
|
---|
239 | attlist.postamble, (TEXT | xref | eref | iref | cref | spanx)*
|
---|
240 | }
|
---|
241 | attlist.postamble &= empty
|
---|
242 | texttable =
|
---|
243 | element texttable {
|
---|
244 | attlist.texttable, preamble?, ttcol+, c*, postamble?
|
---|
245 | }
|
---|
246 | attlist.texttable &=
|
---|
247 | attribute anchor { xsd:ID }?,
|
---|
248 | [ a:defaultValue = "" ] attribute title { ATEXT }?,
|
---|
249 | [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?,
|
---|
250 | [ a:defaultValue = "center" ] attribute align { "left" | "center" | "right" }?,
|
---|
251 | [ a:defaultValue = "full" ] attribute style { "all" | "none" | "headers" | "full" }?
|
---|
252 | ttcol = element ttcol { attlist.ttcol, CTEXT }
|
---|
253 | attlist.ttcol &=
|
---|
254 | attribute width { ATEXT }?,
|
---|
255 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?
|
---|
256 | c = element c { attlist.c, (TEXT | xref | eref | iref | cref | spanx)* }
|
---|
257 | attlist.c &= empty
|
---|
258 | # Back matter
|
---|
259 |
|
---|
260 | # sections, if present, are appendices
|
---|
261 | back = element back { attlist.back, references*, section* }
|
---|
262 | attlist.back &= empty
|
---|
263 | references = element references { attlist.references, reference+ }
|
---|
264 | attlist.references &=
|
---|
265 | [ a:defaultValue = "References" ] attribute title { ATEXT }?
|
---|
266 | reference =
|
---|
267 | element reference {
|
---|
268 | attlist.reference, front, seriesInfo*, format*, annotation*
|
---|
269 | }
|
---|
270 | attlist.reference &=
|
---|
271 | attribute anchor { xsd:ID }?,
|
---|
272 | attribute target { URI }?
|
---|
273 | seriesInfo = element seriesInfo { attlist.seriesInfo, empty }
|
---|
274 | attlist.seriesInfo &=
|
---|
275 | attribute name { ATEXT },
|
---|
276 | attribute value { ATEXT }
|
---|
277 | format = element format { attlist.format, empty }
|
---|
278 | attlist.format &=
|
---|
279 | attribute target { URI }?,
|
---|
280 | attribute type { ATEXT },
|
---|
281 | attribute octets { NUMBER }?
|
---|
282 | annotation =
|
---|
283 | element annotation {
|
---|
284 | attlist.annotation, (TEXT | xref | eref | iref | cref | spanx)*
|
---|
285 | }
|
---|
286 | attlist.annotation &= empty
|
---|
287 | start = rfc
|
---|