XML Schema,几个未知的固定属性

问题描述 投票:1回答:1

我有一个模式,用于验证我的应用程序的HTTP请求。它对查询字符串和帖子内容非常有效,但我已经遇到了标题参数的绊脚石。理想情况下,我想检查HTTP_REQUEST_METHOD是'GET'还是'POST'等,但除此之外,我不关心其他参数的值。

所以,我的XML可能看起来像:

<REQUEST>
 <HEADERS>
  <User-Agent>bla bla</User-Agent>
  <Cookie>bla bla</Cookie>

   ...

  <request_method>GET</request_method>

   ...

  <remote_port>bla bla</remote_port>
 </HEADERS>
 <QUERY_STRING>
   ...
 </QUERY_STRING>
</REQUEST>

是否有任何方法可以为标题参数指定一个我不能预见的通配符,同时坚持认为如果有标记其内容是固定的?

这个有点:

<xsd:any namespace="##any" minOccurs="0" processContents="lax"/>
... fixed value of 'GET' for <request_method> ...
<xsd:any namespace="##any" minOccurs="0" processContents="lax"/>
xsd
1个回答
1
投票

这基本上是lax的用途。它将验证它所知道的元素并忽略其他元素。你只需要用any在你的内容模型中放一个maxOccurs=unbounded,并定义像request_header这样的已知参数作为全局元素。

唯一的问题是任何其他定义的全局元素如果在那里发生也将被验证。

示例模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="HEADERS">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="request_method">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="GET"/>
        <xs:enumeration value="POST"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xs:schema>

如果您的验证器支持它,XML Schema 1.1中有更丰富的选项。

© www.soinside.com 2019 - 2024. All rights reserved.