使用 XSD 确保 XML 验证中的字符串不为空

Make sure string is not empty in XML validation with XSD

我有一个 XML 文件,如下所示。我想确保 menonic 始终存在并且不是空字符串。

我在 XSD 中这样设置 use="required"

<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>

属性 @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>

简单类型 xs:string 是没有规则或约束的普通字符串。您需要创建一个具有一些约束的简单类型(在 XML 架构中称为 'facets'),并在助记符属性的定义中使用该简单类型。

    <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 架构规范以获取完整列表:https://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes