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

时间:2011-02-22 13:14:51

标签: xsd

我有一个架构,用于验证对我的应用程序的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"/>

1 个答案:

答案 0 :(得分: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中有更丰富的选项。