XSD: как ограничить количество символов в атрибуте строкового типа? - PullRequest
31 голосов
/ 09 июня 2009

У меня есть вопрос относительно добавления ограничений в мою XML-схему (xsd). У меня сложного типа, как:

<xsd:complexType name="xxx">
   <xsd:attribute/>
   .....
</xsd:complexType>

У меня много атрибутов в этом сложном типе, и немногие из них имеют строковый тип. Теперь я хочу, чтобы эти атрибуты строкового типа были ограничены y нет. символов, как мне добавить это ограничение?

Спасибо! -Ankush

Ответы [ 5 ]

58 голосов
/ 09 июня 2009

Вам нужно создать простой тип, например, так:

  <xs:simpleType name="LimitedString">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>

и затем используйте этот новый тип в вашей схеме:

  <xs:complexType name="test">
    <xs:sequence>
      <xs:element name="abc" type="xs:String" />
    </xs:sequence>
    <xs:attribute type="LimitedString" name="myattr" />
  </xs:complexType>

Марк

21 голосов
/ 09 июня 2009

Вы можете ограничить строку числом символов следующим образом:

<xs:simpleType name="threeCharString">
  <xs:annotation>
    <xs:documentation>3-char strings only</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
  </xs:restriction>
</xs:simpleType>

xs: длина в вышеприведенном ограничивает длину строки до точно 3 символа. Вы также можете использовать xs: minLength и xs: maxlength или оба.

Вы можете указать шаблон так:

<xs:simpleType name="fourCharAlphaString">
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z]{4}"/>
  </xs:restriction>
</xs:simpleType>

Выше сказано, 4 символа, любого из a-z, A-Z. xs: pattern является регулярным выражением, поэтому отправляйтесь с ним в город.

Вы можете ограничить строку определенным набором строк следующим образом:

<xs:simpleType name="iso3currency">
  <xs:annotation>
    <xs:documentation>ISO-4217 3-letter currency codes. Only a subset are defined here.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
    <xs:enumeration value="AUD"/>
    <xs:enumeration value="BRL"/>
    <xs:enumeration value="CAD"/>
    <xs:enumeration value="CNY"/>
    <xs:enumeration value="EUR"/>
    <xs:enumeration value="GBP"/>
    <xs:enumeration value="INR"/>
    <xs:enumeration value="JPY"/>
    <xs:enumeration value="RUR"/>
    <xs:enumeration value="USD"/>
  </xs:restriction>
</xs:simpleType>
12 голосов
/ 28 января 2014

Ответ marc_s потребует от вас определить новый тип для каждой возможной длины строки, которую вы можете использовать. Вместо этого вы можете определить ограничение непосредственно для самого атрибута.

  <xs:complexType name="Test">
    <xs:attribute name="LimitedString">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value = "50"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
3 голосов
/ 07 октября 2015

Добавьте это, и у меня все получится,

<xs:element  name="vendor">
    <xs:simpleType>
        <xs:annotation>
            <xs:documentation>80-char strings only</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>
0 голосов
/ 09 июня 2009

вы всегда можете определить максимальную длину строки в xsd. Просто добавьте атрибут manLength соотв. MINLENGTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...