启用片段级一致性时,是否忽略XML Schema验证?

Joh*_*n K 5 .net c# xsd xml-validation

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

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

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

在我的情况下,我正在验证XHTML 1 Strict Schema.由于像<center>这样弃用的HTML标签没有被标记为无效,这也是我认为片段一致性忽略模式的部分原因.此外,当我在同一场景中使用文档级一致性时,成功标记了有效性错误.

对于我正在使用的验证方案类型的代码示例,请参阅此内容.

Joh*_*n K 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>
Run Code Online (Sandbox Code Playgroud)

我可以将其包装起来进行验证,以符合 XHTML 严格架构

<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>
Run Code Online (Sandbox Code Playgroud)

这个解决方案对我有用,所以我会暂时使用它;我还不确定是否存在更好的解决方案。