如何将XSD片段添加到架构?

时间:2012-06-25 06:08:44

标签: .net xml .net-4.0 xsd

我正在尝试针对仅代表该片段的XSD验证XmlDocument的片段。例如:

<!-- Validate entire message against message.xsd -->
<?xml version="1.0" encoding="utf-8" ?>
<Message>
    <Header>
        ...
    </Header>
    <Body>
        <!-- Validate this against body.xsd -->
        ...
    </Body>
</Message>

根据开发人员提供的 message.xsd 架构验证整个邮件。 <Body>元素的内容将根据客户端提供的 body.xsd 架构进行验证。

body.xsd 架构对<Message><Header><Body>元素一无所知。它仅定义<Body>元素中应包含的内容。

我无法弄清楚如何针对XML模式片段验证XML片段。似乎所有东西都建议XML模式片段需要知道它的祖先元素。我有几条路,但我不确定如何实现它们。

  1. 以编程方式将 body.xsd 注入 message.xsd 的相应节点。
  2. XmlElement中提取相应的XmlDocument,然后根据此节点创建新的XmlDocument
  3. 与命名空间有关,我还没理解。
  4. 此问题有哪些解决方案?

1 个答案:

答案 0 :(得分:0)

我不太了解用于架构验证的本机.NET API,但是很常见的是发现验证API不够灵活,无法验证除root之外的元素。一种方法是使用模式感知XQuery处理器(例如Saxon-EE)使用查询调用验证

import schema ... at "body.xsd";
validate strict {/Message/Header/Body}