basictypes.rng 4.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
<?xml version="1.0"?>
<!-- network-related definitions used in multiple grammars -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

  <!-- Our unsignedInt doesn"t allow a leading "+" in its lexical form -->
  <define name="unsignedInt">
    <data type="unsignedInt">
      <param name="pattern">[0-9]+</param>
    </data>
  </define>
E
Eric Blake 已提交
11 12 13 14 15
  <define name='unsignedLong'>
    <data type='unsignedLong'>
      <param name='pattern'>[0-9]+</param>
    </data>
  </define>
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

  <define name="positiveInteger">
    <data type="positiveInteger">
      <param name="pattern">[0-9]+</param>
    </data>
  </define>

  <define name="uint8range">
    <choice>
      <data type="string">
        <param name="pattern">0x[0-9a-fA-F]{1,2}</param>
      </data>
      <data type="int">
        <param name="minInclusive">0</param>
        <param name="maxInclusive">255</param>
      </data>
    </choice>
  </define>
  <define name="uint24range">
    <choice>
      <data type="string">
        <param name="pattern">0x[0-9a-fA-F]{1,6}</param>
      </data>
      <data type="int">
        <param name="minInclusive">0</param>
        <param name="maxInclusive">16777215</param>
      </data>
    </choice>
  </define>

  <define name="UUID">
    <choice>
      <data type="string">
        <param name="pattern">[a-fA-F0-9]{32}</param>
      </data>
      <data type="string">
        <param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
      </data>
    </choice>
  </define>

  <!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
  <define name="macAddr">
    <data type="string">
      <param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param>
    </data>
  </define>

  <!-- An ipv4 "dotted quad" address -->
  <define name="ipv4Addr">
    <data type="string">
      <param name="pattern">(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))</param>
    </data>
  </define>

  <!-- Based on http://blog.mes-stats.fr/2008/10/09/regex-ipv4-et-ipv6 -->
  <define name="ipv6Addr">
    <data type="string">
      <!-- To understand this better, take apart the toplevel "|"s -->
<param name="pattern">(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|(([0-9A-Fa-f]{1,4}:){0,5}:(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|(::([0-9A-Fa-f]{1,4}:){0,5}(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([1-9][0-9])|([0-9])))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:)</param>
    </data>
  </define>

  <define name="ipAddr">
    <choice>
      <ref name="ipv4Addr"/>
      <ref name="ipv6Addr"/>
    </choice>
  </define>

  <define name="ipv4Prefix">
    <data type="unsignedInt">
      <param name="maxInclusive">32</param>
    </data>
  </define>

  <define name="ipv6Prefix">
    <data type="unsignedInt">
      <param name="maxInclusive">128</param>
    </data>
  </define>

  <define name="ipPrefix">
    <choice>
      <ref name="ipv4Prefix"/>
      <ref name="ipv6Prefix"/>
    </choice>
  </define>

105 106 107 108 109 110
  <define name="genericName">
    <data type="string">
      <param name="pattern">[a-zA-Z0-9_\+\-]+</param>
    </data>
  </define>

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
  <define name="dnsName">
    <data type="string">
      <param name="pattern">[a-zA-Z0-9\.\-]+</param>
    </data>
  </define>

  <define name="deviceName">
    <data type="string">
      <param name="pattern">[a-zA-Z0-9_\.\-\\:/]+</param>
    </data>
  </define>

  <define name="filePath">
    <data type="string">
      <param name="pattern">[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]+</param>
    </data>
  </define>

  <define name="absFilePath">
    <data type="string">
      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]+</param>
    </data>
  </define>

  <define name="absDirPath">
    <data type="string">
      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]*</param>
    </data>
  </define>

E
Eric Blake 已提交
141 142
  <define name='unit'>
    <data type='string'>
E
Eric Blake 已提交
143
      <param name='pattern'>(bytes)|[kKmMgGtTpPeE]</param>
E
Eric Blake 已提交
144 145
    </data>
  </define>
E
Eric Blake 已提交
146 147 148 149 150 151 152 153
  <define name='scaledInteger'>
    <optional>
      <attribute name='unit'>
        <ref name='unit'/>
      </attribute>
    </optional>
    <ref name='unsignedLong'/>
  </define>
E
Eric Blake 已提交
154

155
</grammar>