00001
00002
00003 import lxml.etree
00004
00005
00006
00007 left_right = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
00008 <!--
00009 $Id: left-right-schema.rnc 2839 2009-10-27 18:53:00Z sra $
00010
00011 RelaxNG Schema for RPKI left-right protocol.
00012
00013 libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
00014 run the compact syntax through trang to get XML syntax.
00015 -->
00016 <grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
00017 <!-- Top level PDU -->
00018 <start>
00019 <element name="msg">
00020 <attribute name="version">
00021 <data type="positiveInteger">
00022 <param name="maxInclusive">1</param>
00023 </data>
00024 </attribute>
00025 <choice>
00026 <group>
00027 <attribute name="type">
00028 <value>query</value>
00029 </attribute>
00030 <zeroOrMore>
00031 <ref name="query_elt"/>
00032 </zeroOrMore>
00033 </group>
00034 <group>
00035 <attribute name="type">
00036 <value>reply</value>
00037 </attribute>
00038 <zeroOrMore>
00039 <ref name="reply_elt"/>
00040 </zeroOrMore>
00041 </group>
00042 </choice>
00043 </element>
00044 </start>
00045 <!-- PDUs allowed in a query -->
00046 <define name="query_elt" combine="choice">
00047 <ref name="self_query"/>
00048 </define>
00049 <define name="query_elt" combine="choice">
00050 <ref name="bsc_query"/>
00051 </define>
00052 <define name="query_elt" combine="choice">
00053 <ref name="parent_query"/>
00054 </define>
00055 <define name="query_elt" combine="choice">
00056 <ref name="child_query"/>
00057 </define>
00058 <define name="query_elt" combine="choice">
00059 <ref name="repository_query"/>
00060 </define>
00061 <define name="query_elt" combine="choice">
00062 <ref name="list_roa_requests_query"/>
00063 </define>
00064 <define name="query_elt" combine="choice">
00065 <ref name="list_resources_query"/>
00066 </define>
00067 <define name="query_elt" combine="choice">
00068 <ref name="list_published_objects_query"/>
00069 </define>
00070 <!-- PDUs allowed in a reply -->
00071 <define name="reply_elt" combine="choice">
00072 <ref name="self_reply"/>
00073 </define>
00074 <define name="reply_elt" combine="choice">
00075 <ref name="bsc_reply"/>
00076 </define>
00077 <define name="reply_elt" combine="choice">
00078 <ref name="parent_reply"/>
00079 </define>
00080 <define name="reply_elt" combine="choice">
00081 <ref name="child_reply"/>
00082 </define>
00083 <define name="reply_elt" combine="choice">
00084 <ref name="repository_reply"/>
00085 </define>
00086 <define name="reply_elt" combine="choice">
00087 <ref name="list_resources_reply"/>
00088 </define>
00089 <define name="reply_elt" combine="choice">
00090 <ref name="list_roa_requests_reply"/>
00091 </define>
00092 <define name="reply_elt" combine="choice">
00093 <ref name="list_published_objects_reply"/>
00094 </define>
00095 <define name="reply_elt" combine="choice">
00096 <ref name="report_error_reply"/>
00097 </define>
00098 <!-- Tag attributes for bulk operations -->
00099 <define name="tag">
00100 <optional>
00101 <attribute name="tag">
00102 <data type="token">
00103 <param name="maxLength">1024</param>
00104 </data>
00105 </attribute>
00106 </optional>
00107 </define>
00108 <!--
00109 Combinations of action and type attributes used in later definitions.
00110 The same patterns repeat in most of the elements in this protocol.
00111 -->
00112 <define name="ctl_create">
00113 <attribute name="action">
00114 <value>create</value>
00115 </attribute>
00116 <ref name="tag"/>
00117 </define>
00118 <define name="ctl_set">
00119 <attribute name="action">
00120 <value>set</value>
00121 </attribute>
00122 <ref name="tag"/>
00123 </define>
00124 <define name="ctl_get">
00125 <attribute name="action">
00126 <value>get</value>
00127 </attribute>
00128 <ref name="tag"/>
00129 </define>
00130 <define name="ctl_list">
00131 <attribute name="action">
00132 <value>list</value>
00133 </attribute>
00134 <ref name="tag"/>
00135 </define>
00136 <define name="ctl_destroy">
00137 <attribute name="action">
00138 <value>destroy</value>
00139 </attribute>
00140 <ref name="tag"/>
00141 </define>
00142 <!-- Base64 encoded DER stuff -->
00143 <define name="base64">
00144 <data type="base64Binary">
00145 <param name="maxLength">512000</param>
00146 </data>
00147 </define>
00148 <!--
00149 Base definition for all fields that are really just SQL primary indices
00150 sql_id = xsd:nonNegativeInteger
00151 -->
00152 <!--
00153 ...except that fields containing SQL primary indicies don't belong
00154 in this protocol, so they're turninging into handles.
00155 Length restriction is a MySQL implementation issue.
00156 Handles are case-insensitive (because SQL is, among other reasons).
00157 -->
00158 <define name="object_handle">
00159 <data type="string">
00160 <param name="maxLength">255</param>
00161 <param name="pattern">[\-_A-Za-z0-9]*</param>
00162 </data>
00163 </define>
00164 <!-- URIs -->
00165 <define name="uri">
00166 <data type="anyURI">
00167 <param name="maxLength">4096</param>
00168 </data>
00169 </define>
00170 <!-- Name fields imported from up-down protocol -->
00171 <define name="up_down_name">
00172 <data type="token">
00173 <param name="maxLength">1024</param>
00174 </data>
00175 </define>
00176 <!-- Resource lists -->
00177 <define name="asn_list">
00178 <data type="string">
00179 <param name="maxLength">512000</param>
00180 <param name="pattern">[\-,0-9]*</param>
00181 </data>
00182 </define>
00183 <define name="ipv4_list">
00184 <data type="string">
00185 <param name="maxLength">512000</param>
00186 <param name="pattern">[\-,0-9/.]*</param>
00187 </data>
00188 </define>
00189 <define name="ipv6_list">
00190 <data type="string">
00191 <param name="maxLength">512000</param>
00192 <param name="pattern">[\-,0-9/:a-fA-F]*</param>
00193 </data>
00194 </define>
00195 <!-- <self/> element -->
00196 <define name="self_bool">
00197 <optional>
00198 <attribute name="rekey">
00199 <value>yes</value>
00200 </attribute>
00201 </optional>
00202 <optional>
00203 <attribute name="reissue">
00204 <value>yes</value>
00205 </attribute>
00206 </optional>
00207 <optional>
00208 <attribute name="revoke">
00209 <value>yes</value>
00210 </attribute>
00211 </optional>
00212 <optional>
00213 <attribute name="run_now">
00214 <value>yes</value>
00215 </attribute>
00216 </optional>
00217 <optional>
00218 <attribute name="publish_world_now">
00219 <value>yes</value>
00220 </attribute>
00221 </optional>
00222 <optional>
00223 <attribute name="revoke_forgotten">
00224 <value>yes</value>
00225 </attribute>
00226 </optional>
00227 </define>
00228 <define name="self_payload">
00229 <optional>
00230 <attribute name="use_hsm">
00231 <choice>
00232 <value>yes</value>
00233 <value>no</value>
00234 </choice>
00235 </attribute>
00236 </optional>
00237 <optional>
00238 <attribute name="crl_interval">
00239 <data type="positiveInteger"/>
00240 </attribute>
00241 </optional>
00242 <optional>
00243 <attribute name="regen_margin">
00244 <data type="positiveInteger"/>
00245 </attribute>
00246 </optional>
00247 <optional>
00248 <element name="bpki_cert">
00249 <ref name="base64"/>
00250 </element>
00251 </optional>
00252 <optional>
00253 <element name="bpki_glue">
00254 <ref name="base64"/>
00255 </element>
00256 </optional>
00257 </define>
00258 <define name="self_handle">
00259 <attribute name="self_handle">
00260 <ref name="object_handle"/>
00261 </attribute>
00262 </define>
00263 <define name="self_query" combine="choice">
00264 <element name="self">
00265 <ref name="ctl_create"/>
00266 <ref name="self_handle"/>
00267 <ref name="self_bool"/>
00268 <ref name="self_payload"/>
00269 </element>
00270 </define>
00271 <define name="self_reply" combine="choice">
00272 <element name="self">
00273 <ref name="ctl_create"/>
00274 <ref name="self_handle"/>
00275 </element>
00276 </define>
00277 <define name="self_query" combine="choice">
00278 <element name="self">
00279 <ref name="ctl_set"/>
00280 <ref name="self_handle"/>
00281 <ref name="self_bool"/>
00282 <ref name="self_payload"/>
00283 </element>
00284 </define>
00285 <define name="self_reply" combine="choice">
00286 <element name="self">
00287 <ref name="ctl_set"/>
00288 <ref name="self_handle"/>
00289 </element>
00290 </define>
00291 <define name="self_query" combine="choice">
00292 <element name="self">
00293 <ref name="ctl_get"/>
00294 <ref name="self_handle"/>
00295 </element>
00296 </define>
00297 <define name="self_reply" combine="choice">
00298 <element name="self">
00299 <ref name="ctl_get"/>
00300 <ref name="self_handle"/>
00301 <ref name="self_payload"/>
00302 </element>
00303 </define>
00304 <define name="self_query" combine="choice">
00305 <element name="self">
00306 <ref name="ctl_list"/>
00307 </element>
00308 </define>
00309 <define name="self_reply" combine="choice">
00310 <element name="self">
00311 <ref name="ctl_list"/>
00312 <ref name="self_handle"/>
00313 <ref name="self_payload"/>
00314 </element>
00315 </define>
00316 <define name="self_query" combine="choice">
00317 <element name="self">
00318 <ref name="ctl_destroy"/>
00319 <ref name="self_handle"/>
00320 </element>
00321 </define>
00322 <define name="self_reply" combine="choice">
00323 <element name="self">
00324 <ref name="ctl_destroy"/>
00325 <ref name="self_handle"/>
00326 </element>
00327 </define>
00328 <!-- <bsc/> element. Key parameters hardwired for now. -->
00329 <define name="bsc_bool">
00330 <optional>
00331 <attribute name="generate_keypair">
00332 <value>yes</value>
00333 </attribute>
00334 <optional>
00335 <attribute name="key_type">
00336 <value>rsa</value>
00337 </attribute>
00338 </optional>
00339 <optional>
00340 <attribute name="hash_alg">
00341 <value>sha256</value>
00342 </attribute>
00343 </optional>
00344 <optional>
00345 <attribute name="key_length">
00346 <value>2048</value>
00347 </attribute>
00348 </optional>
00349 </optional>
00350 </define>
00351 <define name="bsc_handle">
00352 <attribute name="bsc_handle">
00353 <ref name="object_handle"/>
00354 </attribute>
00355 </define>
00356 <define name="bsc_payload">
00357 <optional>
00358 <element name="signing_cert">
00359 <ref name="base64"/>
00360 </element>
00361 </optional>
00362 <optional>
00363 <element name="signing_cert_crl">
00364 <ref name="base64"/>
00365 </element>
00366 </optional>
00367 </define>
00368 <define name="bsc_pkcs10">
00369 <optional>
00370 <element name="pkcs10_request">
00371 <ref name="base64"/>
00372 </element>
00373 </optional>
00374 </define>
00375 <define name="bsc_query" combine="choice">
00376 <element name="bsc">
00377 <ref name="ctl_create"/>
00378 <ref name="self_handle"/>
00379 <ref name="bsc_handle"/>
00380 <ref name="bsc_bool"/>
00381 <ref name="bsc_payload"/>
00382 </element>
00383 </define>
00384 <define name="bsc_reply" combine="choice">
00385 <element name="bsc">
00386 <ref name="ctl_create"/>
00387 <ref name="self_handle"/>
00388 <ref name="bsc_handle"/>
00389 <ref name="bsc_pkcs10"/>
00390 </element>
00391 </define>
00392 <define name="bsc_query" combine="choice">
00393 <element name="bsc">
00394 <ref name="ctl_set"/>
00395 <ref name="self_handle"/>
00396 <ref name="bsc_handle"/>
00397 <ref name="bsc_bool"/>
00398 <ref name="bsc_payload"/>
00399 </element>
00400 </define>
00401 <define name="bsc_reply" combine="choice">
00402 <element name="bsc">
00403 <ref name="ctl_set"/>
00404 <ref name="self_handle"/>
00405 <ref name="bsc_handle"/>
00406 <ref name="bsc_pkcs10"/>
00407 </element>
00408 </define>
00409 <define name="bsc_query" combine="choice">
00410 <element name="bsc">
00411 <ref name="ctl_get"/>
00412 <ref name="self_handle"/>
00413 <ref name="bsc_handle"/>
00414 </element>
00415 </define>
00416 <define name="bsc_reply" combine="choice">
00417 <element name="bsc">
00418 <ref name="ctl_get"/>
00419 <ref name="self_handle"/>
00420 <ref name="bsc_handle"/>
00421 <ref name="bsc_payload"/>
00422 <ref name="bsc_pkcs10"/>
00423 </element>
00424 </define>
00425 <define name="bsc_query" combine="choice">
00426 <element name="bsc">
00427 <ref name="ctl_list"/>
00428 <ref name="self_handle"/>
00429 </element>
00430 </define>
00431 <define name="bsc_reply" combine="choice">
00432 <element name="bsc">
00433 <ref name="ctl_list"/>
00434 <ref name="self_handle"/>
00435 <ref name="bsc_handle"/>
00436 <ref name="bsc_payload"/>
00437 <ref name="bsc_pkcs10"/>
00438 </element>
00439 </define>
00440 <define name="bsc_query" combine="choice">
00441 <element name="bsc">
00442 <ref name="ctl_destroy"/>
00443 <ref name="self_handle"/>
00444 <ref name="bsc_handle"/>
00445 </element>
00446 </define>
00447 <define name="bsc_reply" combine="choice">
00448 <element name="bsc">
00449 <ref name="ctl_destroy"/>
00450 <ref name="self_handle"/>
00451 <ref name="bsc_handle"/>
00452 </element>
00453 </define>
00454 <!-- <parent/> element -->
00455 <define name="parent_handle">
00456 <attribute name="parent_handle">
00457 <ref name="object_handle"/>
00458 </attribute>
00459 </define>
00460 <define name="parent_bool">
00461 <optional>
00462 <attribute name="rekey">
00463 <value>yes</value>
00464 </attribute>
00465 </optional>
00466 <optional>
00467 <attribute name="reissue">
00468 <value>yes</value>
00469 </attribute>
00470 </optional>
00471 <optional>
00472 <attribute name="revoke">
00473 <value>yes</value>
00474 </attribute>
00475 </optional>
00476 <optional>
00477 <attribute name="revoke_forgotten">
00478 <value>yes</value>
00479 </attribute>
00480 </optional>
00481 </define>
00482 <define name="parent_payload">
00483 <optional>
00484 <attribute name="peer_contact_uri">
00485 <ref name="uri"/>
00486 </attribute>
00487 </optional>
00488 <optional>
00489 <attribute name="sia_base">
00490 <ref name="uri"/>
00491 </attribute>
00492 </optional>
00493 <optional>
00494 <ref name="bsc_handle"/>
00495 </optional>
00496 <optional>
00497 <ref name="repository_handle"/>
00498 </optional>
00499 <optional>
00500 <attribute name="sender_name">
00501 <ref name="up_down_name"/>
00502 </attribute>
00503 </optional>
00504 <optional>
00505 <attribute name="recipient_name">
00506 <ref name="up_down_name"/>
00507 </attribute>
00508 </optional>
00509 <optional>
00510 <element name="bpki_cms_cert">
00511 <ref name="base64"/>
00512 </element>
00513 </optional>
00514 <optional>
00515 <element name="bpki_cms_glue">
00516 <ref name="base64"/>
00517 </element>
00518 </optional>
00519 <optional>
00520 <element name="bpki_https_cert">
00521 <ref name="base64"/>
00522 </element>
00523 </optional>
00524 <optional>
00525 <element name="bpki_https_glue">
00526 <ref name="base64"/>
00527 </element>
00528 </optional>
00529 </define>
00530 <define name="parent_query" combine="choice">
00531 <element name="parent">
00532 <ref name="ctl_create"/>
00533 <ref name="self_handle"/>
00534 <ref name="parent_handle"/>
00535 <ref name="parent_bool"/>
00536 <ref name="parent_payload"/>
00537 </element>
00538 </define>
00539 <define name="parent_reply" combine="choice">
00540 <element name="parent">
00541 <ref name="ctl_create"/>
00542 <ref name="self_handle"/>
00543 <ref name="parent_handle"/>
00544 </element>
00545 </define>
00546 <define name="parent_query" combine="choice">
00547 <element name="parent">
00548 <ref name="ctl_set"/>
00549 <ref name="self_handle"/>
00550 <ref name="parent_handle"/>
00551 <ref name="parent_bool"/>
00552 <ref name="parent_payload"/>
00553 </element>
00554 </define>
00555 <define name="parent_reply" combine="choice">
00556 <element name="parent">
00557 <ref name="ctl_set"/>
00558 <ref name="self_handle"/>
00559 <ref name="parent_handle"/>
00560 </element>
00561 </define>
00562 <define name="parent_query" combine="choice">
00563 <element name="parent">
00564 <ref name="ctl_get"/>
00565 <ref name="self_handle"/>
00566 <ref name="parent_handle"/>
00567 </element>
00568 </define>
00569 <define name="parent_reply" combine="choice">
00570 <element name="parent">
00571 <ref name="ctl_get"/>
00572 <ref name="self_handle"/>
00573 <ref name="parent_handle"/>
00574 <ref name="parent_payload"/>
00575 </element>
00576 </define>
00577 <define name="parent_query" combine="choice">
00578 <element name="parent">
00579 <ref name="ctl_list"/>
00580 <ref name="self_handle"/>
00581 </element>
00582 </define>
00583 <define name="parent_reply" combine="choice">
00584 <element name="parent">
00585 <ref name="ctl_list"/>
00586 <ref name="self_handle"/>
00587 <ref name="parent_handle"/>
00588 <ref name="parent_payload"/>
00589 </element>
00590 </define>
00591 <define name="parent_query" combine="choice">
00592 <element name="parent">
00593 <ref name="ctl_destroy"/>
00594 <ref name="self_handle"/>
00595 <ref name="parent_handle"/>
00596 </element>
00597 </define>
00598 <define name="parent_reply" combine="choice">
00599 <element name="parent">
00600 <ref name="ctl_destroy"/>
00601 <ref name="self_handle"/>
00602 <ref name="parent_handle"/>
00603 </element>
00604 </define>
00605 <!-- <child/> element -->
00606 <define name="child_handle">
00607 <attribute name="child_handle">
00608 <ref name="object_handle"/>
00609 </attribute>
00610 </define>
00611 <define name="child_bool">
00612 <optional>
00613 <attribute name="reissue">
00614 <value>yes</value>
00615 </attribute>
00616 </optional>
00617 </define>
00618 <define name="child_payload">
00619 <optional>
00620 <ref name="bsc_handle"/>
00621 </optional>
00622 <optional>
00623 <element name="bpki_cert">
00624 <ref name="base64"/>
00625 </element>
00626 </optional>
00627 <optional>
00628 <element name="bpki_glue">
00629 <ref name="base64"/>
00630 </element>
00631 </optional>
00632 </define>
00633 <define name="child_query" combine="choice">
00634 <element name="child">
00635 <ref name="ctl_create"/>
00636 <ref name="self_handle"/>
00637 <ref name="child_handle"/>
00638 <ref name="child_bool"/>
00639 <ref name="child_payload"/>
00640 </element>
00641 </define>
00642 <define name="child_reply" combine="choice">
00643 <element name="child">
00644 <ref name="ctl_create"/>
00645 <ref name="self_handle"/>
00646 <ref name="child_handle"/>
00647 </element>
00648 </define>
00649 <define name="child_query" combine="choice">
00650 <element name="child">
00651 <ref name="ctl_set"/>
00652 <ref name="self_handle"/>
00653 <ref name="child_handle"/>
00654 <ref name="child_bool"/>
00655 <ref name="child_payload"/>
00656 </element>
00657 </define>
00658 <define name="child_reply" combine="choice">
00659 <element name="child">
00660 <ref name="ctl_set"/>
00661 <ref name="self_handle"/>
00662 <ref name="child_handle"/>
00663 </element>
00664 </define>
00665 <define name="child_query" combine="choice">
00666 <element name="child">
00667 <ref name="ctl_get"/>
00668 <ref name="self_handle"/>
00669 <ref name="child_handle"/>
00670 </element>
00671 </define>
00672 <define name="child_reply" combine="choice">
00673 <element name="child">
00674 <ref name="ctl_get"/>
00675 <ref name="self_handle"/>
00676 <ref name="child_handle"/>
00677 <ref name="child_payload"/>
00678 </element>
00679 </define>
00680 <define name="child_query" combine="choice">
00681 <element name="child">
00682 <ref name="ctl_list"/>
00683 <ref name="self_handle"/>
00684 </element>
00685 </define>
00686 <define name="child_reply" combine="choice">
00687 <element name="child">
00688 <ref name="ctl_list"/>
00689 <ref name="self_handle"/>
00690 <ref name="child_handle"/>
00691 <ref name="child_payload"/>
00692 </element>
00693 </define>
00694 <define name="child_query" combine="choice">
00695 <element name="child">
00696 <ref name="ctl_destroy"/>
00697 <ref name="self_handle"/>
00698 <ref name="child_handle"/>
00699 </element>
00700 </define>
00701 <define name="child_reply" combine="choice">
00702 <element name="child">
00703 <ref name="ctl_destroy"/>
00704 <ref name="self_handle"/>
00705 <ref name="child_handle"/>
00706 </element>
00707 </define>
00708 <!-- <repository/> element -->
00709 <define name="repository_handle">
00710 <attribute name="repository_handle">
00711 <ref name="object_handle"/>
00712 </attribute>
00713 </define>
00714 <define name="repository_payload">
00715 <optional>
00716 <attribute name="peer_contact_uri">
00717 <ref name="uri"/>
00718 </attribute>
00719 </optional>
00720 <optional>
00721 <ref name="bsc_handle"/>
00722 </optional>
00723 <optional>
00724 <element name="bpki_cert">
00725 <ref name="base64"/>
00726 </element>
00727 </optional>
00728 <optional>
00729 <element name="bpki_glue">
00730 <ref name="base64"/>
00731 </element>
00732 </optional>
00733 </define>
00734 <define name="repository_query" combine="choice">
00735 <element name="repository">
00736 <ref name="ctl_create"/>
00737 <ref name="self_handle"/>
00738 <ref name="repository_handle"/>
00739 <ref name="repository_payload"/>
00740 </element>
00741 </define>
00742 <define name="repository_reply" combine="choice">
00743 <element name="repository">
00744 <ref name="ctl_create"/>
00745 <ref name="self_handle"/>
00746 <ref name="repository_handle"/>
00747 </element>
00748 </define>
00749 <define name="repository_query" combine="choice">
00750 <element name="repository">
00751 <ref name="ctl_set"/>
00752 <ref name="self_handle"/>
00753 <ref name="repository_handle"/>
00754 <ref name="repository_payload"/>
00755 </element>
00756 </define>
00757 <define name="repository_reply" combine="choice">
00758 <element name="repository">
00759 <ref name="ctl_set"/>
00760 <ref name="self_handle"/>
00761 <ref name="repository_handle"/>
00762 </element>
00763 </define>
00764 <define name="repository_query" combine="choice">
00765 <element name="repository">
00766 <ref name="ctl_get"/>
00767 <ref name="self_handle"/>
00768 <ref name="repository_handle"/>
00769 </element>
00770 </define>
00771 <define name="repository_reply" combine="choice">
00772 <element name="repository">
00773 <ref name="ctl_get"/>
00774 <ref name="self_handle"/>
00775 <ref name="repository_handle"/>
00776 <ref name="repository_payload"/>
00777 </element>
00778 </define>
00779 <define name="repository_query" combine="choice">
00780 <element name="repository">
00781 <ref name="ctl_list"/>
00782 <ref name="self_handle"/>
00783 </element>
00784 </define>
00785 <define name="repository_reply" combine="choice">
00786 <element name="repository">
00787 <ref name="ctl_list"/>
00788 <ref name="self_handle"/>
00789 <ref name="repository_handle"/>
00790 <ref name="repository_payload"/>
00791 </element>
00792 </define>
00793 <define name="repository_query" combine="choice">
00794 <element name="repository">
00795 <ref name="ctl_destroy"/>
00796 <ref name="self_handle"/>
00797 <ref name="repository_handle"/>
00798 </element>
00799 </define>
00800 <define name="repository_reply" combine="choice">
00801 <element name="repository">
00802 <ref name="ctl_destroy"/>
00803 <ref name="self_handle"/>
00804 <ref name="repository_handle"/>
00805 </element>
00806 </define>
00807 <!-- <list_resources/> element -->
00808 <define name="list_resources_query">
00809 <element name="list_resources">
00810 <ref name="tag"/>
00811 <ref name="self_handle"/>
00812 <ref name="child_handle"/>
00813 </element>
00814 </define>
00815 <define name="list_resources_reply">
00816 <element name="list_resources">
00817 <ref name="tag"/>
00818 <ref name="self_handle"/>
00819 <ref name="child_handle"/>
00820 <attribute name="valid_until">
00821 <data type="dateTime">
00822 <param name="pattern">.*Z</param>
00823 </data>
00824 </attribute>
00825 <optional>
00826 <attribute name="asn">
00827 <ref name="asn_list"/>
00828 </attribute>
00829 </optional>
00830 <optional>
00831 <attribute name="ipv4">
00832 <ref name="ipv4_list"/>
00833 </attribute>
00834 </optional>
00835 <optional>
00836 <attribute name="ipv6">
00837 <ref name="ipv6_list"/>
00838 </attribute>
00839 </optional>
00840 </element>
00841 </define>
00842 <!-- <list_roa_requests/> element -->
00843 <define name="list_roa_requests_query">
00844 <element name="list_roa_requests">
00845 <ref name="tag"/>
00846 <ref name="self_handle"/>
00847 </element>
00848 </define>
00849 <define name="list_roa_requests_reply">
00850 <element name="list_roa_requests">
00851 <ref name="tag"/>
00852 <ref name="self_handle"/>
00853 <attribute name="asn">
00854 <data type="positiveInteger"/>
00855 </attribute>
00856 <optional>
00857 <attribute name="ipv4">
00858 <ref name="ipv4_list"/>
00859 </attribute>
00860 </optional>
00861 <optional>
00862 <attribute name="ipv6">
00863 <ref name="ipv6_list"/>
00864 </attribute>
00865 </optional>
00866 </element>
00867 </define>
00868 <!-- <list_published_objects/> element -->
00869 <define name="list_published_objects_query">
00870 <element name="list_published_objects">
00871 <ref name="tag"/>
00872 <ref name="self_handle"/>
00873 </element>
00874 </define>
00875 <define name="list_published_objects_reply">
00876 <element name="list_published_objects">
00877 <ref name="tag"/>
00878 <ref name="self_handle"/>
00879 <attribute name="uri">
00880 <ref name="uri"/>
00881 </attribute>
00882 <ref name="base64"/>
00883 </element>
00884 </define>
00885 <!-- <report_error/> element -->
00886 <define name="error">
00887 <data type="token">
00888 <param name="maxLength">1024</param>
00889 </data>
00890 </define>
00891 <define name="report_error_reply">
00892 <element name="report_error">
00893 <ref name="tag"/>
00894 <optional>
00895 <ref name="self_handle"/>
00896 </optional>
00897 <attribute name="error_code">
00898 <ref name="error"/>
00899 </attribute>
00900 <optional>
00901 <data type="string">
00902 <param name="maxLength">512000</param>
00903 </data>
00904 </optional>
00905 </element>
00906 </define>
00907 </grammar>
00908 <!--
00909 Local Variables:
00910 indent-tabs-mode: nil
00911 End:
00912 -->
00913 '''))
00914
00915
00916
00917 up_down = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
00918 <!--
00919 $Id: up-down-schema.rnc 2839 2009-10-27 18:53:00Z sra $
00920
00921 RelaxNG Scheme for up-down protocol, extracted from APNIC Wiki.
00922
00923 libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
00924 run the compact syntax through trang to get XML syntax.
00925 -->
00926 <grammar ns="http://www.apnic.net/specs/rescerts/up-down/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
00927 <start>
00928 <element name="message">
00929 <attribute name="version">
00930 <data type="positiveInteger">
00931 <param name="maxInclusive">1</param>
00932 </data>
00933 </attribute>
00934 <attribute name="sender">
00935 <data type="token">
00936 <param name="maxLength">1024</param>
00937 </data>
00938 </attribute>
00939 <attribute name="recipient">
00940 <data type="token">
00941 <param name="maxLength">1024</param>
00942 </data>
00943 </attribute>
00944 <ref name="payload"/>
00945 </element>
00946 </start>
00947 <define name="payload" combine="choice">
00948 <attribute name="type">
00949 <value>list</value>
00950 </attribute>
00951 <ref name="list_request"/>
00952 </define>
00953 <define name="payload" combine="choice">
00954 <attribute name="type">
00955 <value>list_response</value>
00956 </attribute>
00957 <ref name="list_response"/>
00958 </define>
00959 <define name="payload" combine="choice">
00960 <attribute name="type">
00961 <value>issue</value>
00962 </attribute>
00963 <ref name="issue_request"/>
00964 </define>
00965 <define name="payload" combine="choice">
00966 <attribute name="type">
00967 <value>issue_response</value>
00968 </attribute>
00969 <ref name="issue_response"/>
00970 </define>
00971 <define name="payload" combine="choice">
00972 <attribute name="type">
00973 <value>revoke</value>
00974 </attribute>
00975 <ref name="revoke_request"/>
00976 </define>
00977 <define name="payload" combine="choice">
00978 <attribute name="type">
00979 <value>revoke_response</value>
00980 </attribute>
00981 <ref name="revoke_response"/>
00982 </define>
00983 <define name="payload" combine="choice">
00984 <attribute name="type">
00985 <value>error_response</value>
00986 </attribute>
00987 <ref name="error_response"/>
00988 </define>
00989 <define name="list_request">
00990 <empty/>
00991 </define>
00992 <define name="list_response">
00993 <zeroOrMore>
00994 <ref name="class"/>
00995 </zeroOrMore>
00996 </define>
00997 <define name="class">
00998 <element name="class">
00999 <attribute name="class_name">
01000 <data type="token">
01001 <param name="maxLength">1024</param>
01002 </data>
01003 </attribute>
01004 <attribute name="cert_url">
01005 <data type="string">
01006 <param name="maxLength">4096</param>
01007 </data>
01008 </attribute>
01009 <attribute name="resource_set_as">
01010 <data type="string">
01011 <param name="maxLength">512000</param>
01012 <param name="pattern">[\-,0-9]*</param>
01013 </data>
01014 </attribute>
01015 <attribute name="resource_set_ipv4">
01016 <data type="string">
01017 <param name="maxLength">512000</param>
01018 <param name="pattern">[\-,/.0-9]*</param>
01019 </data>
01020 </attribute>
01021 <attribute name="resource_set_ipv6">
01022 <data type="string">
01023 <param name="maxLength">512000</param>
01024 <param name="pattern">[\-,/:0-9a-fA-F]*</param>
01025 </data>
01026 </attribute>
01027 <optional>
01028 <attribute name="resource_set_notafter">
01029 <data type="dateTime">
01030 <param name="pattern">.*Z</param>
01031 </data>
01032 </attribute>
01033 </optional>
01034 <optional>
01035 <attribute name="suggested_sia_head">
01036 <data type="anyURI">
01037 <param name="maxLength">1024</param>
01038 <param name="pattern">rsync://.+</param>
01039 </data>
01040 </attribute>
01041 </optional>
01042 <zeroOrMore>
01043 <element name="certificate">
01044 <attribute name="cert_url">
01045 <data type="string">
01046 <param name="maxLength">4096</param>
01047 </data>
01048 </attribute>
01049 <optional>
01050 <attribute name="req_resource_set_as">
01051 <data type="string">
01052 <param name="maxLength">512000</param>
01053 <param name="pattern">[\-,0-9]*</param>
01054 </data>
01055 </attribute>
01056 </optional>
01057 <optional>
01058 <attribute name="req_resource_set_ipv4">
01059 <data type="string">
01060 <param name="maxLength">512000</param>
01061 <param name="pattern">[\-,/.0-9]*</param>
01062 </data>
01063 </attribute>
01064 </optional>
01065 <optional>
01066 <attribute name="req_resource_set_ipv6">
01067 <data type="string">
01068 <param name="maxLength">512000</param>
01069 <param name="pattern">[\-,/:0-9a-fA-F]*</param>
01070 </data>
01071 </attribute>
01072 </optional>
01073 <data type="base64Binary">
01074 <param name="maxLength">512000</param>
01075 </data>
01076 </element>
01077 </zeroOrMore>
01078 <element name="issuer">
01079 <data type="base64Binary">
01080 <param name="maxLength">512000</param>
01081 </data>
01082 </element>
01083 </element>
01084 </define>
01085 <define name="issue_request">
01086 <element name="request">
01087 <attribute name="class_name">
01088 <data type="token">
01089 <param name="maxLength">1024</param>
01090 </data>
01091 </attribute>
01092 <optional>
01093 <attribute name="req_resource_set_as">
01094 <data type="string">
01095 <param name="maxLength">512000</param>
01096 <param name="pattern">[\-,0-9]*</param>
01097 </data>
01098 </attribute>
01099 </optional>
01100 <optional>
01101 <attribute name="req_resource_set_ipv4">
01102 <data type="string">
01103 <param name="maxLength">512000</param>
01104 <param name="pattern">[\-,/.0-9]*</param>
01105 </data>
01106 </attribute>
01107 </optional>
01108 <optional>
01109 <attribute name="req_resource_set_ipv6">
01110 <data type="string">
01111 <param name="maxLength">512000</param>
01112 <param name="pattern">[\-,/:0-9a-fA-F]*</param>
01113 </data>
01114 </attribute>
01115 </optional>
01116 <data type="base64Binary">
01117 <param name="maxLength">512000</param>
01118 </data>
01119 </element>
01120 </define>
01121 <define name="issue_response">
01122 <ref name="class"/>
01123 </define>
01124 <define name="revoke_request">
01125 <ref name="revocation"/>
01126 </define>
01127 <define name="revoke_response">
01128 <ref name="revocation"/>
01129 </define>
01130 <define name="revocation">
01131 <element name="key">
01132 <attribute name="class_name">
01133 <data type="token">
01134 <param name="maxLength">1024</param>
01135 </data>
01136 </attribute>
01137 <attribute name="ski">
01138 <data type="token">
01139 <param name="maxLength">1024</param>
01140 </data>
01141 </attribute>
01142 </element>
01143 </define>
01144 <define name="error_response">
01145 <element name="status">
01146 <data type="positiveInteger">
01147 <param name="maxInclusive">999999999999999</param>
01148 </data>
01149 </element>
01150 <optional>
01151 <element name="description">
01152 <attribute name="xml:lang">
01153 <data type="language"/>
01154 </attribute>
01155 <data type="string">
01156 <param name="maxLength">1024</param>
01157 </data>
01158 </element>
01159 </optional>
01160 </define>
01161 </grammar>
01162 <!--
01163 Local Variables:
01164 indent-tabs-mode: nil
01165 End:
01166 -->
01167 '''))
01168
01169
01170
01171 publication = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
01172 <!--
01173 $Id: publication-schema.rnc 2839 2009-10-27 18:53:00Z sra $
01174
01175 RelaxNG Schema for RPKI publication protocol.
01176
01177 libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
01178 run the compact syntax through trang to get XML syntax.
01179 -->
01180 <grammar ns="http://www.hactrn.net/uris/rpki/publication-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
01181 <!-- Top level PDU -->
01182 <start>
01183 <element name="msg">
01184 <attribute name="version">
01185 <data type="positiveInteger">
01186 <param name="maxInclusive">1</param>
01187 </data>
01188 </attribute>
01189 <choice>
01190 <group>
01191 <attribute name="type">
01192 <value>query</value>
01193 </attribute>
01194 <zeroOrMore>
01195 <ref name="query_elt"/>
01196 </zeroOrMore>
01197 </group>
01198 <group>
01199 <attribute name="type">
01200 <value>reply</value>
01201 </attribute>
01202 <zeroOrMore>
01203 <ref name="reply_elt"/>
01204 </zeroOrMore>
01205 </group>
01206 </choice>
01207 </element>
01208 </start>
01209 <!-- PDUs allowed in a query -->
01210 <define name="query_elt">
01211 <choice>
01212 <ref name="config_query"/>
01213 <ref name="client_query"/>
01214 <ref name="certificate_query"/>
01215 <ref name="crl_query"/>
01216 <ref name="manifest_query"/>
01217 <ref name="roa_query"/>
01218 </choice>
01219 </define>
01220 <!-- PDUs allowed in a reply -->
01221 <define name="reply_elt">
01222 <choice>
01223 <ref name="config_reply"/>
01224 <ref name="client_reply"/>
01225 <ref name="certificate_reply"/>
01226 <ref name="crl_reply"/>
01227 <ref name="manifest_reply"/>
01228 <ref name="roa_reply"/>
01229 <ref name="report_error_reply"/>
01230 </choice>
01231 </define>
01232 <!-- Tag attributes for bulk operations -->
01233 <define name="tag">
01234 <attribute name="tag">
01235 <data type="token">
01236 <param name="maxLength">1024</param>
01237 </data>
01238 </attribute>
01239 </define>
01240 <!-- Base64 encoded DER stuff -->
01241 <define name="base64">
01242 <data type="base64Binary">
01243 <param name="maxLength">512000</param>
01244 </data>
01245 </define>
01246 <!-- Publication URLs -->
01247 <define name="uri_t">
01248 <data type="anyURI">
01249 <param name="maxLength">4096</param>
01250 </data>
01251 </define>
01252 <define name="uri">
01253 <attribute name="uri">
01254 <ref name="uri_t"/>
01255 </attribute>
01256 </define>
01257 <!--
01258 Handles on remote objects (replaces passing raw SQL IDs). NB:
01259 Unlike the up-down protocol, handles in this protocol allow "/" as a
01260 hierarchy delimiter.
01261 -->
01262 <define name="object_handle">
01263 <data type="string">
01264 <param name="maxLength">255</param>
01265 <param name="pattern">[\-_A-Za-z0-9/]*</param>
01266 </data>
01267 </define>
01268 <!--
01269 <config/> element (use restricted to repository operator)
01270 config_handle attribute, create, list, and destroy commands omitted deliberately, see code for details
01271 -->
01272 <define name="config_payload">
01273 <optional>
01274 <element name="bpki_crl">
01275 <ref name="base64"/>
01276 </element>
01277 </optional>
01278 </define>
01279 <define name="config_query" combine="choice">
01280 <element name="config">
01281 <attribute name="action">
01282 <value>set</value>
01283 </attribute>
01284 <optional>
01285 <ref name="tag"/>
01286 </optional>
01287 <ref name="config_payload"/>
01288 </element>
01289 </define>
01290 <define name="config_reply" combine="choice">
01291 <element name="config">
01292 <attribute name="action">
01293 <value>set</value>
01294 </attribute>
01295 <optional>
01296 <ref name="tag"/>
01297 </optional>
01298 </element>
01299 </define>
01300 <define name="config_query" combine="choice">
01301 <element name="config">
01302 <attribute name="action">
01303 <value>get</value>
01304 </attribute>
01305 <optional>
01306 <ref name="tag"/>
01307 </optional>
01308 </element>
01309 </define>
01310 <define name="config_reply" combine="choice">
01311 <element name="config">
01312 <attribute name="action">
01313 <value>get</value>
01314 </attribute>
01315 <optional>
01316 <ref name="tag"/>
01317 </optional>
01318 <ref name="config_payload"/>
01319 </element>
01320 </define>
01321 <!-- <client/> element (use restricted to repository operator) -->
01322 <define name="client_handle">
01323 <attribute name="client_handle">
01324 <ref name="object_handle"/>
01325 </attribute>
01326 </define>
01327 <define name="client_payload">
01328 <optional>
01329 <attribute name="base_uri">
01330 <ref name="uri_t"/>
01331 </attribute>
01332 </optional>
01333 <optional>
01334 <element name="bpki_cert">
01335 <ref name="base64"/>
01336 </element>
01337 </optional>
01338 <optional>
01339 <element name="bpki_glue">
01340 <ref name="base64"/>
01341 </element>
01342 </optional>
01343 </define>
01344 <define name="client_query" combine="choice">
01345 <element name="client">
01346 <attribute name="action">
01347 <value>create</value>
01348 </attribute>
01349 <optional>
01350 <ref name="tag"/>
01351 </optional>
01352 <ref name="client_handle"/>
01353 <ref name="client_payload"/>
01354 </element>
01355 </define>
01356 <define name="client_reply" combine="choice">
01357 <element name="client">
01358 <attribute name="action">
01359 <value>create</value>
01360 </attribute>
01361 <optional>
01362 <ref name="tag"/>
01363 </optional>
01364 <ref name="client_handle"/>
01365 </element>
01366 </define>
01367 <define name="client_query" combine="choice">
01368 <element name="client">
01369 <attribute name="action">
01370 <value>set</value>
01371 </attribute>
01372 <optional>
01373 <ref name="tag"/>
01374 </optional>
01375 <ref name="client_handle"/>
01376 <ref name="client_payload"/>
01377 </element>
01378 </define>
01379 <define name="client_reply" combine="choice">
01380 <element name="client">
01381 <attribute name="action">
01382 <value>set</value>
01383 </attribute>
01384 <optional>
01385 <ref name="tag"/>
01386 </optional>
01387 <ref name="client_handle"/>
01388 </element>
01389 </define>
01390 <define name="client_query" combine="choice">
01391 <element name="client">
01392 <attribute name="action">
01393 <value>get</value>
01394 </attribute>
01395 <optional>
01396 <ref name="tag"/>
01397 </optional>
01398 <ref name="client_handle"/>
01399 </element>
01400 </define>
01401 <define name="client_reply" combine="choice">
01402 <element name="client">
01403 <attribute name="action">
01404 <value>get</value>
01405 </attribute>
01406 <optional>
01407 <ref name="tag"/>
01408 </optional>
01409 <ref name="client_handle"/>
01410 <ref name="client_payload"/>
01411 </element>
01412 </define>
01413 <define name="client_query" combine="choice">
01414 <element name="client">
01415 <attribute name="action">
01416 <value>list</value>
01417 </attribute>
01418 <optional>
01419 <ref name="tag"/>
01420 </optional>
01421 </element>
01422 </define>
01423 <define name="client_reply" combine="choice">
01424 <element name="client">
01425 <attribute name="action">
01426 <value>list</value>
01427 </attribute>
01428 <optional>
01429 <ref name="tag"/>
01430 </optional>
01431 <ref name="client_handle"/>
01432 <ref name="client_payload"/>
01433 </element>
01434 </define>
01435 <define name="client_query" combine="choice">
01436 <element name="client">
01437 <attribute name="action">
01438 <value>destroy</value>
01439 </attribute>
01440 <optional>
01441 <ref name="tag"/>
01442 </optional>
01443 <ref name="client_handle"/>
01444 </element>
01445 </define>
01446 <define name="client_reply" combine="choice">
01447 <element name="client">
01448 <attribute name="action">
01449 <value>destroy</value>
01450 </attribute>
01451 <optional>
01452 <ref name="tag"/>
01453 </optional>
01454 <ref name="client_handle"/>
01455 </element>
01456 </define>
01457 <!-- <certificate/> element -->
01458 <define name="certificate_query" combine="choice">
01459 <element name="certificate">
01460 <attribute name="action">
01461 <value>publish</value>
01462 </attribute>
01463 <optional>
01464 <ref name="tag"/>
01465 </optional>
01466 <ref name="uri"/>
01467 <ref name="base64"/>
01468 </element>
01469 </define>
01470 <define name="certificate_reply" combine="choice">
01471 <element name="certificate">
01472 <attribute name="action">
01473 <value>publish</value>
01474 </attribute>
01475 <optional>
01476 <ref name="tag"/>
01477 </optional>
01478 <ref name="uri"/>
01479 </element>
01480 </define>
01481 <define name="certificate_query" combine="choice">
01482 <element name="certificate">
01483 <attribute name="action">
01484 <value>withdraw</value>
01485 </attribute>
01486 <optional>
01487 <ref name="tag"/>
01488 </optional>
01489 <ref name="uri"/>
01490 </element>
01491 </define>
01492 <define name="certificate_reply" combine="choice">
01493 <element name="certificate">
01494 <attribute name="action">
01495 <value>withdraw</value>
01496 </attribute>
01497 <optional>
01498 <ref name="tag"/>
01499 </optional>
01500 <ref name="uri"/>
01501 </element>
01502 </define>
01503 <!-- <crl/> element -->
01504 <define name="crl_query" combine="choice">
01505 <element name="crl">
01506 <attribute name="action">
01507 <value>publish</value>
01508 </attribute>
01509 <optional>
01510 <ref name="tag"/>
01511 </optional>
01512 <ref name="uri"/>
01513 <ref name="base64"/>
01514 </element>
01515 </define>
01516 <define name="crl_reply" combine="choice">
01517 <element name="crl">
01518 <attribute name="action">
01519 <value>publish</value>
01520 </attribute>
01521 <optional>
01522 <ref name="tag"/>
01523 </optional>
01524 <ref name="uri"/>
01525 </element>
01526 </define>
01527 <define name="crl_query" combine="choice">
01528 <element name="crl">
01529 <attribute name="action">
01530 <value>withdraw</value>
01531 </attribute>
01532 <optional>
01533 <ref name="tag"/>
01534 </optional>
01535 <ref name="uri"/>
01536 </element>
01537 </define>
01538 <define name="crl_reply" combine="choice">
01539 <element name="crl">
01540 <attribute name="action">
01541 <value>withdraw</value>
01542 </attribute>
01543 <optional>
01544 <ref name="tag"/>
01545 </optional>
01546 <ref name="uri"/>
01547 </element>
01548 </define>
01549 <!-- <manifest/> element -->
01550 <define name="manifest_query" combine="choice">
01551 <element name="manifest">
01552 <attribute name="action">
01553 <value>publish</value>
01554 </attribute>
01555 <optional>
01556 <ref name="tag"/>
01557 </optional>
01558 <ref name="uri"/>
01559 <ref name="base64"/>
01560 </element>
01561 </define>
01562 <define name="manifest_reply" combine="choice">
01563 <element name="manifest">
01564 <attribute name="action">
01565 <value>publish</value>
01566 </attribute>
01567 <optional>
01568 <ref name="tag"/>
01569 </optional>
01570 <ref name="uri"/>
01571 </element>
01572 </define>
01573 <define name="manifest_query" combine="choice">
01574 <element name="manifest">
01575 <attribute name="action">
01576 <value>withdraw</value>
01577 </attribute>
01578 <optional>
01579 <ref name="tag"/>
01580 </optional>
01581 <ref name="uri"/>
01582 </element>
01583 </define>
01584 <define name="manifest_reply" combine="choice">
01585 <element name="manifest">
01586 <attribute name="action">
01587 <value>withdraw</value>
01588 </attribute>
01589 <optional>
01590 <ref name="tag"/>
01591 </optional>
01592 <ref name="uri"/>
01593 </element>
01594 </define>
01595 <!-- <roa/> element -->
01596 <define name="roa_query" combine="choice">
01597 <element name="roa">
01598 <attribute name="action">
01599 <value>publish</value>
01600 </attribute>
01601 <optional>
01602 <ref name="tag"/>
01603 </optional>
01604 <ref name="uri"/>
01605 <ref name="base64"/>
01606 </element>
01607 </define>
01608 <define name="roa_reply" combine="choice">
01609 <element name="roa">
01610 <attribute name="action">
01611 <value>publish</value>
01612 </attribute>
01613 <optional>
01614 <ref name="tag"/>
01615 </optional>
01616 <ref name="uri"/>
01617 </element>
01618 </define>
01619 <define name="roa_query" combine="choice">
01620 <element name="roa">
01621 <attribute name="action">
01622 <value>withdraw</value>
01623 </attribute>
01624 <optional>
01625 <ref name="tag"/>
01626 </optional>
01627 <ref name="uri"/>
01628 </element>
01629 </define>
01630 <define name="roa_reply" combine="choice">
01631 <element name="roa">
01632 <attribute name="action">
01633 <value>withdraw</value>
01634 </attribute>
01635 <optional>
01636 <ref name="tag"/>
01637 </optional>
01638 <ref name="uri"/>
01639 </element>
01640 </define>
01641 <!-- <report_error/> element -->
01642 <define name="error">
01643 <data type="token">
01644 <param name="maxLength">1024</param>
01645 </data>
01646 </define>
01647 <define name="report_error_reply">
01648 <element name="report_error">
01649 <optional>
01650 <ref name="tag"/>
01651 </optional>
01652 <attribute name="error_code">
01653 <ref name="error"/>
01654 </attribute>
01655 <optional>
01656 <data type="string">
01657 <param name="maxLength">512000</param>
01658 </data>
01659 </optional>
01660 </element>
01661 </define>
01662 </grammar>
01663 <!--
01664 Local Variables:
01665 indent-tabs-mode: nil
01666 End:
01667 -->
01668 '''))
01669