限制一个XML请求属性值和少数元素值
Restrict the a XML request attribute value and few of the element value
这个post是post的扩展:
现在我可以使用 XSD 限制所有属性和元素值。但我现在只想限制一个或两个元素值,而不是全部。
XML:
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">di.js</resp>
<resp name="BI">bi.j</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: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>
此 XSD 仅允许上述 XML 请求,如果其中包含以下值:
letter.c
di.js
bi.j
但我现在要做的是动态允许一些元素值,以便 XSD 验证以下所有请求。
1.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER"></resp>
<resp name="BI">bi.j</resp>
</response>
2.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">23.x</resp>
<resp name="BI">bi.j</resp>
</response>
3.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">di.js</resp>
<resp name="BI">dj.c</resp>
</response>
所以基本上,属性 JSON 将始终具有 letter.c,JSON 中除 letter.c 之外的任何内容都应被 XSD 丢弃。另一方面,属性 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>
此 XML 可以为 JSON
使用固定值,并为 XSD 1.0 中的 SWAGGER
和 BI
使用枚举。
这个post是post的扩展:
现在我可以使用 XSD 限制所有属性和元素值。但我现在只想限制一个或两个元素值,而不是全部。
XML:
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">di.js</resp>
<resp name="BI">bi.j</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: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>
此 XSD 仅允许上述 XML 请求,如果其中包含以下值:
letter.c
di.js
bi.j
但我现在要做的是动态允许一些元素值,以便 XSD 验证以下所有请求。
1.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER"></resp>
<resp name="BI">bi.j</resp>
</response>
2.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">23.x</resp>
<resp name="BI">bi.j</resp>
</response>
3.
<response src="XML">
<resp name="JSON">letter.c</resp>
<resp name="SWAGGER">di.js</resp>
<resp name="BI">dj.c</resp>
</response>
所以基本上,属性 JSON 将始终具有 letter.c,JSON 中除 letter.c 之外的任何内容都应被 XSD 丢弃。另一方面,属性 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>
此 XML 可以为 JSON
使用固定值,并为 XSD 1.0 中的 SWAGGER
和 BI
使用枚举。