5

从我对 XML 和 Schema 验证的逗留来看,似乎当为XMLReader实例启用片段级一致性时,XML 源将停止针对任何包含的 Schemas进行验证。

但是我无法从 MSDN 文档中验证这一点,因为它似乎没有根据一致性级别描述 XSD Schema 行为。此外,如果我认为这个问题是真的,我找不到解决方法。

我想知道如何针对 XSD 架构验证 XML片段。

就我而言,我正在验证XHTML 1 Strict Schema。事实上,像 <center> 这样已弃用的 HTML 标签并没有被标记为无效,这是我认为片段一致性忽略模式的部分原因。此外,当我在同一场景中使用文档级一致性时,会成功标记有效性错误。

有关我正在使用的验证场景类型的代码示例,请参阅此

4

1 回答 1

2

我想我在这篇题为HOW TO: Validate XML Fragments against an XML Schema in Visual C#.NET的MSKB 文章中找到了答案。文章 底部指出:

注意:只有 XML 模式中的类型声明和顶级元素会根据 XML 模式进行验证。子元素被视为本地元素,因此无法验证。为了验证子元素,声明一个顶级元素并引用它。

我认为那段有错误,目的是说明top-level elements in the XMLschema document/fragment are validated against an XML Schema

因为 Microsoft 代码示例从顶层开始其片段(而不是任意在文档中),所以它与验证一起工作。但是在我的情况下,我正在使用中间文档构造。

如果我的解释有误,请纠正我。


解决方法/解决方案

一种解决方法是让我将我的片段填充到顶级元素中以进行验证。

换句话说,如果我正在处理 XHTML 片段:

<div>MY FRAGMENT</div>

我可以将其包装以进行验证以符合 XHTML Strict Schema,如下所示:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML fragment enclosed, conforming to XHTML 1.0 Strict Template.</title>
</head>
<body>

    <div>MY FRAGMENT</div>

</body>
</html>

该解决方案对我有用,因此我将在此期间使用它;是否存在更好的解决方案我还不确定。

于 2010-09-03T19:15:21.417 回答