1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
<!--
A DTD for Pandoc XML format.
Copyright : Copyright (C) 2025- Massimiliano Farinella
License : GNU GPL, version 2 or above
Maintainer : Massimiliano Farinella <[email protected]>
This is a DTD for the XML representation of Pandoc AST.
It's an equivalent of native and JSON formats, but modeled as XML.
You can validate Pandoc XML documents with this DTD,
but there are some limitations:
- a Pandoc Attr can contain arbitrary attributes, but it looks like you can't tell
an element has arbitrary attributes in a DTD
- some Pandoc attributes have constraints that can't be specified with a DTD
The Relax-NG and XML Schema translations of this specification overcome
some of those limitations (see pandoc-xml.rng and pandoc-xml.xsd).
-->
<!ELEMENT Pandoc (meta, blocks)>
<!ATTLIST Pandoc api-version CDATA #REQUIRED>
<!ENTITY % block "Para | Plain | Header | Div | BlockQuote | HorizontalRule | BulletList | OrderedList | DefinitionList | Table | Figure | LineBlock | CodeBlock | RawBlock">
<!ENTITY % inline_element "Str | Space | Emph | Strong | Underline | Strikeout | Superscript | Subscript | SmallCaps | Quoted | Cite | Code | SoftBreak | LineBreak | Math | RawInline | Link | Image | Note | Span">
<!ENTITY % inline "#PCDATA | %inline_element;">
<!ENTITY % attr "id ID #IMPLIED class CDATA #IMPLIED">
<!ENTITY % metavalue "MetaMap | MetaList | MetaBool | MetaString | MetaInlines | MetaBlocks">
<!ELEMENT meta (entry*)>
<!ELEMENT MetaMap (entry*)>
<!ELEMENT entry (%metavalue;)*>
<!ATTLIST entry key CDATA #REQUIRED>
<!ELEMENT MetaList (%metavalue;)*>
<!ELEMENT MetaBool EMPTY>
<!ATTLIST MetaBool value (true | false) #REQUIRED>
<!ELEMENT MetaString (#PCDATA)>
<!ELEMENT MetaInlines (%inline;)*>
<!ELEMENT MetaBlocks (%block;)*>
<!ELEMENT blocks (%block;)*>
<!ELEMENT Para (%inline;)*>
<!ELEMENT Plain (%inline;)*>
<!ELEMENT Header (%inline;)*>
<!ATTLIST Header
level CDATA "1"
%attr;>
<!ELEMENT Div (%block;)* >
<!ATTLIST Div
custom-style CDATA #IMPLIED
%attr;>
<!ELEMENT BlockQuote (%block;)*>
<!ELEMENT HorizontalRule EMPTY>
<!ELEMENT BulletList (item)+>
<!ELEMENT OrderedList (item)+>
<!ATTLIST OrderedList
start CDATA "1"
number-style (DefaultStyle | Example | Decimal | LowerRoman | UpperRoman | LowerAlpha | UpperAlpha) "DefaultStyle"
number-delim (DefaultDelim | Period | OneParen | TwoParens) "DefaultDelim">
<!ELEMENT DefinitionList (item)+>
<!ELEMENT item ((%block;)*|(term,def+))>
<!ELEMENT term (%inline;)*>
<!ELEMENT def (%block;)*>
<!ELEMENT Table (Caption, colspecs, TableHead, TableBody+, TableFoot)>
<!ATTLIST Table
custom-style CDATA #IMPLIED
%attr;>
<!ELEMENT Caption (ShortCaption?, (%block;)*)>
<!ELEMENT ShortCaption (%inline;)*>
<!ELEMENT colspecs (ColSpec+)>
<!ELEMENT ColSpec EMPTY>
<!ATTLIST ColSpec
alignment (AlignLeft | AlignRight | AlignCenter | AlignDefault) "AlignDefault"
col-width CDATA "0">
<!ELEMENT TableHead (Row*)>
<!ATTLIST TableHead %attr;>
<!ELEMENT TableFoot (Row*)>
<!ATTLIST TableFoot %attr;>
<!ELEMENT TableBody (header, body)>
<!ATTLIST TableBody
row-head-columns CDATA "0"
%attr;>
<!ELEMENT header (Row*)>
<!ELEMENT body (Row*)>
<!ELEMENT Row (Cell*)>
<!ATTLIST Row %attr;>
<!ELEMENT Cell (%block;)*>
<!ATTLIST Cell
alignment (AlignLeft | AlignRight | AlignCenter | AlignDefault) "AlignDefault"
row-span CDATA "1"
col-span CDATA "1"
%attr; >
<!ELEMENT Figure (Caption,(%block;)*)>
<!ATTLIST Figure %attr;>
<!ELEMENT LineBlock (line+)>
<!ELEMENT line (%inline;)*>
<!ELEMENT CodeBlock (#PCDATA)>
<!ATTLIST CodeBlock %attr;>
<!ELEMENT RawBlock (#PCDATA)>
<!ATTLIST RawBlock format CDATA #REQUIRED>
<!ELEMENT Space EMPTY>
<!ATTLIST Space count CDATA "1">
<!ELEMENT Str EMPTY>
<!ATTLIST Str content CDATA "">
<!ELEMENT Emph (%inline;)*>
<!ELEMENT Strong (%inline;)*>
<!ELEMENT Underline (%inline;)*>
<!ELEMENT Strikeout (%inline;)*>
<!ELEMENT Superscript (%inline;)*>
<!ELEMENT Subscript (%inline;)*>
<!ELEMENT SmallCaps (%inline;)*>
<!ELEMENT Span (%inline;)*>
<!ATTLIST Span
custom-style CDATA #IMPLIED
%attr;>
<!ELEMENT Quoted (%inline;)*>
<!ATTLIST Quoted quote-type (SingleQuote | DoubleQuote) "DoubleQuote">
<!ELEMENT Math (#PCDATA)>
<!ATTLIST Math math-type (DisplayMath | InlineMath) "InlineMath">
<!ELEMENT RawInline (#PCDATA)>
<!ATTLIST RawInline format CDATA #REQUIRED>
<!ELEMENT Cite (#PCDATA | citations | %inline_element;)*>
<!ELEMENT citations (Citation)+>
<!ELEMENT Citation (prefix?, suffix?)>
<!ELEMENT prefix (%inline;)*>
<!ELEMENT suffix (%inline;)*>
<!ATTLIST Citation
id CDATA #IMPLIED
note-num CDATA #IMPLIED
hash CDATA "0"
mode (AuthorInText | SuppressAuthor | NormalCitation) "AuthorInText">
<!ELEMENT Code (#PCDATA)>
<!ATTLIST Code %attr;>
<!ENTITY % target "title CDATA #IMPLIED url CDATA #IMPLIED">
<!ELEMENT Image (%inline;)*>
<!ATTLIST Image
title CDATA #IMPLIED
src CDATA #IMPLIED
%attr;>
<!ELEMENT Link (%inline;)*>
<!ATTLIST Link
title CDATA #IMPLIED
href CDATA #IMPLIED
%attr;>
<!ELEMENT SoftBreak EMPTY>
<!ELEMENT LineBreak EMPTY>
<!ELEMENT Note (%block;)*>
|