Убедитесь, что строка не пуста при проверке XML с помощью XSD - PullRequest
1 голос
/ 23 января 2020

У меня есть файл XML, например, как показано ниже. Я хочу убедиться, что menonic существует всегда и не является пустой строкой.

Я установил use="required" в моем XSD следующим образом:

<xs:attribute type="xs:string" name="mnemonic" use="required"/>
. Это гарантирует, что это поле настоящее. Но когда строка пуста, как показано ниже <recipeStructureDef mnemonic="" title="Recipe.Bread">, она проходит проверку.

Можно ли как-нибудь проверить, не является ли строка пустой строкой?

Спасибо. Пожалуйста, найдите файлы xml и xsd ниже.

<recipeStructureDef mnemonic="Rice Bag" title="Recipe.Bread">
            <description>           
            </description>

            <parametersTab>
                <parameterTabDef title="Main Parameters">
                    <parameterGroup title="Product Rice">
                    </parameterGroup>
                </parameterTabDef>
             </parametersTab>
</recipeStructureDef>


OP необходимо:

  <xs:complexType name="recipeStructureDefType">
    <xs:sequence>
      <xs:element type="xs:string" name="description"/>
      <xs:element type="parametersTabType" name="parametersTab"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="mnemonic" use="required"/>
    <xs:attribute type="xs:string" name="title"/>
  </xs:complexType>

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Атрибут @mnemonic должен существовать:

<xs:attribute name="mnemonic" use="required" type="nonEmptyString"/>
                              ^^^^^^^^^^^^^^

Значение атрибута для @mnemonic не должно быть пустым:

<xs:simpleType name="nonEmptyString">
  <xs:restriction base="xs:string">
    <xs:minLength value="1"/>
  </xs:restriction>
</xs:simpleType>
1 голос
/ 24 января 2020

Простой тип xs: string представляет собой простую строку без правил или ограничений. Вам необходимо создать простой тип с некоторыми ограничениями (называемый «facets» в XML Schema) и использовать этот простой тип в определении атрибута mnemoni c.

    <xs:simpleType name="mnemonicType" >
      <xs:restriction base="xs:string">
        <xs:minLength value="1" />
      </xs:restriction>
    <xs:simpleType>

    <xs:complexType name="recipeStructureDefType">
      <xs:sequence>
        <xs:element type="xs:string" name="description"/>
        <xs:element type="parametersTabType" name="parametersTab"/>
      </xs:sequence>

      <xs:attribute type="mnemonicType" name="mnemonic" use="required"/>
      <xs:attribute type="xs:string" name="title"/>
    </xs:complexType>

Возможно, вы захотите указать минимальную длину более одного символа, а аспект minLength является одним из многих, которые можно использовать для ограничения ваших простых значений. Ознакомьтесь со спецификацией XML Schema для полного списка: https://www.w3.org/TR/xmlschema-2/#built -in-primitive-datatypes

...