Xsd 限制XML请求属性值和少量元素值
该职位是该职位的延伸: 现在我可以使用XSD限制所有属性和元素值。但我现在只想限制元素值中的一个或两个,而不是全部 XML: 但我现在要做的是动态地允许很少的元素值,以便XSD验证下面的所有请求 一,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的值而变化,您需
字母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>