使用XSD限制属性值和元素的值 [英] Restrict the attribute value and the value of the element using XSD

查看:26
本文介绍了使用XSD限制属性值和元素的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要求,我需要使用 XSD 限制属性值及其元素的值.我已经能够将属性值限制为其中之一

I have a requirement where I need to restrict the attribute value and its element's value using an XSD. I've been able to restrict the attribute value to one of

JSON
SWAGGER

到目前为止,但我还需要将元素值限制为

so far, but I also need to restrict the element value to one of

letter.c
di.js

也一样.

XML:

<response src="XML">
  <resp name="JSON">letter.c</resp>
  <resp name="SWAGGER">di.js</resp>
</response>

XSD:

<xs:schema attributeFormDefault="unqualified"
          elementFormDefault="qualified"
          xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="response">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="resp" maxOccurs="14" minOccurs="1">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="respFilter">
                                <xs:attribute name="name" use="required" 
                                              type="Enum" />
                            </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="XML"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="Enum">
        <xs:restriction base="xs:string">
            <xs:enumeration value="JSON">
            </xs:enumeration>
            <xs:enumeration value="SWAGGER">
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="respFilter">
        <xs:restriction base="xs:string">
            <xs:minLength value="0"></xs:minLength>
            <xs:maxLength value="1064"></xs:maxLength>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

有什么办法可以使用 XSD 限制它们吗?

Is there a way I can restrict both of them using an XSD?

推荐答案

当然,只需像对 resp/@name 属性所做的那样使用 xs:enum.

Sure, just use xs:enum as you've done for the resp/@name attribute.

替换

  <xs:simpleType name="respFilter">
    <xs:restriction base="xs:string">
      <xs:minLength value="0"></xs:minLength>
      <xs:maxLength value="1064"></xs:maxLength>
    </xs:restriction>
  </xs:simpleType>

<xs:restriction base="xs:string">
  <xs:maxLength value="1064"/>
  <xs:enumeration value="letter.c"/>
  <xs:enumeration value="di.js"/>
</xs:restriction>

附注:

  • 使用自闭合标签提高可读性.
  • 您的 xs:minLength value="0"xs:string 基数是多余的.
  • Use self-closing tags to improve readability.
  • Your xs:minLength value="0" against a xs:string base was superfluous.

这篇关于使用XSD限制属性值和元素的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆