blob: 03330fb1fee5bc785f6845b8d3cb6d4708e5bd8e [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001<?xml version='1.0' encoding='UTF-8'?>
2<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
3<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
4<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
5<!-- http://lists.oasis-open.org/archives/relax-ng-comment/200206/maillist.html -->
6
7<grammar xmlns='http://relaxng.org/ns/structure/1.0'
8 xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
9 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
10 ns='http://www.w3.org/2000/09/xmldsig#'
11 datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
12
13 <start>
14 <element name='Signature'><ref name='SignatureType'/></element>
15 </start>
16
17 <define name='CryptoBinary'>
18 <data type='base64Binary'/>
19 </define>
20
21 <define name='SignatureType'>
22 <element name='SignedInfo'><ref name='SignedInfoType'/></element>
23 <element name='SignatureValue'><ref name='SignatureValueType'/></element>
24 <optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
25 <zeroOrMore><element name='Object'><ref name='ObjectType'/></element></zeroOrMore>
26 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
27 <optional><attribute name='xsi:schemaLocation'/></optional>
28 </define>
29
30 <define name='SignatureValueType'>
31 <data type='base64Binary'/>
32 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
33 </define>
34
35<!-- Start SignedInfo -->
36
37 <define name='SignedInfoType'>
38 <element name='CanonicalizationMethod'><ref name='CanonicalizationMethodType'/></element>
39 <element name='SignatureMethod'><ref name='SignatureMethodType'/></element>
40 <optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
41 <oneOrMore><element name='Reference'><ref name='ReferenceType'/></element></oneOrMore>
42 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
43 </define>
44
45 <define name='CanonicalizationMethodType'>
46 <zeroOrMore><ref name='anyThing'/></zeroOrMore>
47 <optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
48 </define>
49
50
51 <define name='SignatureMethodType'>
52 <optional><element name='HMACOutputLength'><data type='integer'/></element></optional>
53 <zeroOrMore><ref name='anyThing'/></zeroOrMore>
54 <optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
55 </define>
56
57<!-- Start Reference -->
58
59 <define name='ReferenceType'>
60 <optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
61 <element name='DigestMethod'><ref name='DigestMethodType'/></element>
62 <element name='DigestValue'><ref name='DigestValueType'/></element>
63 <optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
64 <optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
65 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
66 </define>
67
68 <define name='TransformsType'>
69 <oneOrMore><element name='Transform'><ref name='TransformType'/></element></oneOrMore>
70 </define>
71
72 <define name='TransformType'>
73 <optional><element name='XPath'><data type='string'/></element></optional>
74 <zeroOrMore><ref name='anyThing'/></zeroOrMore>
75 <attribute name='Algorithm'><data type='anyURI'/></attribute>
76 </define>
77
78<!-- End Reference -->
79
80 <define name='DigestMethodType'>
81 <zeroOrMore><ref name='anyThing'/></zeroOrMore>
82 <attribute name='Algorithm'><data type='anyURI'/></attribute>
83 </define>
84
85 <define name='DigestValueType'>
86 <data type='base64Binary'/>
87 </define>
88
89<!-- End SignedInfo -->
90
91<!-- Start KeyInfo -->
92
93 <define name='KeyInfoType'>
94 <oneOrMore>
95 <choice>
96 <element name='KeyName'><data type='string'/></element>
97 <element name='KeyValue'><ref name='KeyValueType'/></element>
98 <element name='RetrievalMethod'><ref name='RetrievalMethodType'/></element>
99 <element name='X509Data'><ref name='X509DataType'/></element>
100 <element name='PGPData'><ref name='PGPDataType'/></element>
101 <element name='SPKIData'><ref name='SPKIDataType'/></element>
102 <element name='MgmtData'><data type='string'/></element>
103 <ref name='anyThing'/>
104 </choice>
105 </oneOrMore>
106 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
107</define>
108
109 <define name='KeyValueType'>
110 <choice>
111 <text/>
112 <element name='DSAKeyValue'><ref name='DSAKeyValueType'/></element>
113 <element name='RSAKeyValue'><ref name='RSAKeyValueType'/></element>
114 <ref name='anyThing'/>
115 </choice>
116 </define>
117
118 <define name='RetrievalMethodType'>
119 <optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
120 <optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
121 <optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
122 </define>
123
124<!-- Start X509Data -->
125
126 <define name='X509DataType'>
127 <oneOrMore>
128 <choice>
129 <element name='X509IssuerSerial'>
130 <element name='X509IssuerName'>
131 <data type='string'/>
132 </element>
133 <element name='X509SerialNumber'>
134 <data type='integer'/>
135 </element>
136 </element>
137 <element name='X509SKI'>
138 <data type='base64Binary'/>
139 </element>
140 <element name='X509SubjectName'>
141 <data type='string'/>
142 </element>
143 <element name='X509Certificate'>
144 <data type='base64Binary'/>
145 </element>
146 <element name='X509CRL'>
147 <data type='base64Binary'/>
148 </element>
149 <ref name='anyThing'/>
150 </choice>
151 </oneOrMore>
152 </define>
153
154<!-- End X509Data -->
155
156<!-- Begin PGPData -->
157
158 <define name='PGPDataType'>
159 <choice>
160 <group>
161 <element name='PGPKeyID'>
162 <data type='base64Binary'/>
163 </element>
164 <optional>
165 <element name='PGPKeyPacket'>
166 <data type='base64Binary'/>
167 </element>
168 </optional>
169 <zeroOrMore>
170 <ref name='anyThing'/>
171 </zeroOrMore>
172 </group>
173 <group>
174 <element name='PGPKeyPacket'>
175 <data type='base64Binary'/>
176 </element>
177 <zeroOrMore>
178 <ref name='anyThing'/>
179 </zeroOrMore>
180 </group>
181 </choice>
182 </define>
183
184<!-- End PGPData -->
185
186<!-- Begin SPKIData -->
187
188 <define name='SPKIDataType'>
189 <oneOrMore>
190 <element name='SPKISexp'>
191 <data type='base64Binary'/>
192 </element>
193 <optional>
194 <ref name='anyThing'/>
195 </optional>
196 </oneOrMore>
197 </define>
198
199<!-- End SPKIData -->
200
201<!-- End KeyInfo -->
202
203
204<!-- Start Object (Manifest, SignatureProperty) -->
205
206 <define name='ObjectType'>
207 <zeroOrMore>
208 <choice>
209 <element name='Manifest'><ref name='ManifestType'/></element>
210 <element name='SignatureProperties'><ref name='SignaturePropertiesType'/></element>
211 <ref name='anyThing'/>
212 </choice>
213 </zeroOrMore>
214 <optional>
215 <attribute name='Encoding'>
216 <data type='anyURI'/>
217 </attribute>
218 </optional>
219 <optional>
220 <attribute name='MimeType'>
221 <data type='string'/>
222 </attribute>
223 </optional>
224 <optional>
225 <attribute name='Id'>
226 <data type='ID'/>
227 </attribute>
228 </optional>
229 </define>
230
231 <define name='ManifestType'>
232 <oneOrMore>
233 <element name='Reference'><ref name='ReferenceType'/></element>
234 </oneOrMore>
235 <optional><attribute name='Id'><data type='ID'/></attribute></optional>
236 </define>
237
238 <define name='SignaturePropertiesType'>
239 <oneOrMore>
240 <element name='SignatureProperty'><ref name='SignaturePropertyType'/></element>
241 </oneOrMore>
242 <optional>
243 <attribute name='Id'>
244 <data type='ID'/>
245 </attribute>
246 </optional>
247 </define>
248
249 <define name='SignaturePropertyType'>
250 <oneOrMore><ref name='anyThing'/></oneOrMore>
251 <optional>
252 <attribute name='Id'>
253 <data type='ID'/>
254 </attribute>
255 </optional>
256 <attribute name='Target'>
257 <data type='anyURI'/>
258 </attribute>
259 </define>
260
261<!-- End Object (Manifest, SignatureProperty) -->
262
263
264<!-- Start KeyValue Element-types -->
265
266 <define name='DSAKeyValueType'>
267 <optional>
268 <element name='P'>
269 <ref name='CryptoBinary'/>
270 </element>
271 <element name='Q'>
272 <ref name='CryptoBinary'/>
273 </element>
274 </optional>
275 <optional>
276 <element name='G'>
277 <ref name='CryptoBinary'/>
278 </element>
279 </optional>
280 <element name='Y'>
281 <ref name='CryptoBinary'/>
282 </element>
283 <optional>
284 <element name='J'>
285 <ref name='CryptoBinary'/>
286 </element>
287 </optional>
288 <optional>
289 <element name='Seed'>
290 <ref name='CryptoBinary'/>
291 </element>
292 <element name='PgenCounter'>
293 <ref name='CryptoBinary'/>
294 </element>
295 </optional>
296 </define>
297
298 <define name='RSAKeyValueType'>
299 <element name='Modulus'>
300 <ref name='CryptoBinary'/>
301 </element>
302 <element name='Exponent'>
303 <ref name='CryptoBinary'/>
304 </element>
305 </define>
306
307
308<!-- End KeyValue Element-types -->
309
310<!-- End Signature -->
311
312
313 <!-- This should emulate the ANY content model under lax validation -->
314 <define name='anyThing'>
315 <zeroOrMore>
316 <choice>
317 <text/>
318 <element>
319 <!-- "except" provided for DTD compatibility -->
320 <!-- [1] ns='http://www.oasis-open.org/committees/relax-ng/compatibility.html#id' -->
321 <anyName>
322 <except>
323 <nsName/>
324 <!-- <nsName ns='http://www.w3.org/2001/04/xmlenc#'/> -->
325 </except>
326 </anyName>
327 <ref name='anyThing'/>
328 <zeroOrMore>
329 <attribute>
330 <anyName/>
331 </attribute>
332 </zeroOrMore>
333 </element>
334 </choice>
335 </zeroOrMore>
336 </define>
337
338
339</grammar>