J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame^] | 1 | <?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> |