Xsd 限制XML请求属性值和少量元素值

Xsd 限制XML请求属性值和少量元素值,xsd,xsd-validation,Xsd,Xsd Validation,该职位是该职位的延伸: 现在我可以使用XSD限制所有属性和元素值。但我现在只想限制元素值中的一个或两个,而不是全部 XML: 但我现在要做的是动态地允许很少的元素值,以便XSD验证下面的所有请求 一, 字母c bi.j 二, 字母c 23.x bi.j 三, 字母c di.js dj.c 所以基本上,属性JSON总是有letter.c,XSD应该丢弃JSON中letter.c以外的任何内容。另一方面,属性SWAGGER&BI可以有任意值或空值。为了使验证根据@name的值而变化,您需

该职位是该职位的延伸:

现在我可以使用XSD限制所有属性和元素值。但我现在只想限制元素值中的一个或两个,而不是全部

XML:

但我现在要做的是动态地允许很少的元素值,以便XSD验证下面的所有请求

一,


字母c
bi.j
二,


字母c
23.x
bi.j
三,


字母c
di.js
dj.c

所以基本上,属性JSON总是有letter.c,XSD应该丢弃JSON中letter.c以外的任何内容。另一方面,属性SWAGGER&BI可以有任意值或空值。

为了使验证根据
@name
的值而变化,您需要XSD 1.1中的断言或条件类型赋值。如果您仅限于XSD 1.0,则必须测试与XSD相关的带外约束,或者必须重新设计XML以减少元数据:

<response src="XML">
  <JSON>letter.c</JSON>
  <SWAGGER>di.js</SWAGGER>
  <BI>bi.j</BI>
</response>

字母c
di.js
bi.j

这个XML可以在XSD 1.0中为
JSON
使用固定值,为
SWAGGER
BI
使用枚举。

即使没有完全理解您要做什么,您也感觉需要XSD 1.1来进行验证。(1) 这是一种选择吗?(2) 您的需求不清楚:至少,解释一下JSON中除letter.c之外的任何内容都应该被XSD丢弃。认识到XSD是用于验证的,它不会丢弃任何东西。XSD1.1在这里不是一个选项。2.我的意思是说,如果除了letter.c之外的任何内容在JSON中作为一个值出现,它不应该由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:enumeration value="BI">
            </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:enumeration value="letter.c"/>
            <xs:enumeration value="di.js"/>
            <xs:enumeration value="bi.j"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
letter.c
di.js
bi.j
<response src="XML">
  <resp name="JSON">letter.c</resp>
  <resp name="SWAGGER"></resp>
  <resp name="BI">bi.j</resp>
</response>
<response src="XML">
  <resp name="JSON">letter.c</resp>
  <resp name="SWAGGER">23.x</resp>
  <resp name="BI">bi.j</resp>
</response>
<response src="XML">
  <resp name="JSON">letter.c</resp>
  <resp name="SWAGGER">di.js</resp>
  <resp name="BI">dj.c</resp>
</response>
<response src="XML">
  <JSON>letter.c</JSON>
  <SWAGGER>di.js</SWAGGER>
  <BI>bi.j</BI>
</response>