xml - 使用模式仅验证部分 XML 文档?

标签 xml validation schema xsd

是否可以编写一个允许将经过验证的 XML 与格式正确的 XML 混合的模式?一个典型的例子是一个数据传输应用程序,其中请求由一堆元数据(我们想要验证)和特定于记录的信息(在业务逻辑中与 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>

目前,我通过手动检查事件内容、用户名和 token 字段的存在性和有效性来进行验证。如果可能的话,我想使用 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>

关于xml - 使用模式仅验证部分 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021509/

相关文章:

mysql - 海量数据查询SOLR

reactjs - Redux 表单复选框验证

validation - 要求 joi 对象中至少有一个允许 null 的非 null 子项

design-patterns - 我可以使用什么数据库模式来保存不同类型的账单数据?

xml - 在 xml 中存储 url 的正确方法?

xml - 根据兄弟节点的值选择 XML 节点

c# - 如何更改类型验证错误消息?

schema - openam federation 的问题(使用 apaches 作为数据存储)

xml - 注销上下文节点范围内的命名空间

java - 在 Wicket 表单 validator 中访问任意数量的字段