是否有可能编写一个模式,允许将经过验证的 XML与格式良好的 XML混合使用?一个典型的例子是数据传输应用程序,其中请求包含一堆元数据(我们想要验证)和特定于记录的信息(与业务逻辑
例:
<request> <campaign>CAMP00001</campaign> <username>user_bob</username> <token>one-time-token-goes-here</token> ... more meta-data ... <records> <record id="90209"> <name>John Doe</name> <address>Park Lane 191</address> <postal>99999</postal> </record> <record id="90210"> <name>Jane Doe</name> <address>Park Lane 192</address> <postal>88888</postal> </record> </records> </request>
目前,我通过手动检查广告系列,用户名和令牌字段内容的存在性和有效性进行验证.如果可能的话,我想使用XML模式这样做,这样就可以更容易地向开发人员传达他们需要提供的元数据以及哪些格式 – 对于广告系列而言,这是不可能的,因为每个广告系列都有自己的一套应用于这些的字段和规则.可以这样做吗?
(我想到的一个解决方案是用一组< data>元素而不是命名元素填充记录,然后在模式中对< data>进行非常宽松的定义..但是这需要更改规格)
您可以在架构中使用Any类型.例如
<xs:element name="foo"> <xs:complexType> <xs:sequence> <xs:element name="first" type="xs:string"/> <xs:element name="second" type="xs:string"/> <xs:any minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element>
这要求每个foo元素具有第一个和第二个节点,然后允许任何其他元素.例如:
<foo> <first>Hello</first> <second>World</second> <other>can be anything</other> <nodes/> </foo>