【问题标题】:Do not validate certain elements in XSD?不验证 XSD 中的某些元素?
【发布时间】:2018-08-14 09:54:32
【问题描述】:

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

例如,示例 XML 是:

<args src="body">
    <arg name="echo1">£*138</arg>
    <arg name="echo2">a-a$138</arg>
    <arg name="echo3">b-b$136</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 来实现呢?

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

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

    另请参阅:

    【讨论】:

    • 感谢您的回复。 XML 无法更改。所以显然下一个选择是使用 XSD1.1。你能帮我怎么开始吗?
    • (1) 确保您可以访问 XSD 1.1 处理器。 (2) 使用我的答案中的 CTA 链接作为如何在 XSD 1.1 中使用 CTA 的示例。 (3) 针对您遇到的任何特定困难发布一个新问题。
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多