不验证 XSD 中的某些元素?

Do not validate certain elements in XSD?

我想使用下面的 XSD 来验证特定的 XML。同时 XSD 不应该验证下面 XML 中的少数元素,但应该验证其他元素。

例如样本 XML 是:

<args src="body">
    <arg name="echo1">£*138</arg>
    <arg name="echo2">a-a8</arg>
    <arg name="echo3">b-b6</arg>
    <arg name="echo4">£*136</arg>
</args>

而我使用的 XSD 是:

<xs:schema attributeFormDefault="unqualified"
  elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="args">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="arg" maxOccurs="9" minOccurs="1">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="argFilter">
                <xs:attribute name="name" use="required" type="codeEnumeration" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="src" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="url"/>
            <xs:enumeration value="body"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="codeEnumeration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="echo1"/>
      <xs:enumeration value="echo2"/>
      <xs:enumeration value="echo3"/>
      <xs:enumeration value="echo4"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="argFilter">
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="256"/>
      <xs:pattern value="[a-zA-Z0-9 ,:?.\\-_=%+@&amp;!@#$%^*()\[\]+={}|\/:;,?`~'&quot;&lt;&gt;]*"/>
     </xs:restriction>
  </xs:simpleType>
</xs:schema>

根据上面的XML,我不希望echo1echo4被验证,但所有其他元素都应该被验证。所以,基本上它应该允许 echo1echo4 中的任何值,但限制 echo2echo3 的值匹配模式值。如何通过修改上面的 XSD?

来实现这一点

如果您仅限于 XSD 1.0,则需要更改 XML 设计或在 XSD 之外进行验证。如果您可以使用 XSD 1.1,那么 Conditional Type Assignment 将允许您根据 XSD 中的属性值表达宽松的验证约束,而无需更改您的 XML 设计。

另请参阅: