代码之家  ›  专栏  ›  技术社区  ›  John K

启用片断级一致性时是否忽略XML架构验证?

  •  5
  • John K  · 技术社区  · 14 年前

    从我在XML和模式验证方面的经历来看,当 fragment-level conformance 为启用 XMLReader 实例,XML源将停止对任何 included Schemas .

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

    我想知道如何验证XML 片段 针对XSD模式。

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

    For a code sample of the type of validation scenario I'm using see this .

    1 回复  |  直到 9 年前
        1
  •  2
  •   John K    14 年前

    我想我找到了答案 this MSKB article 奇怪的是标题 如何:根据Visual C.NET中的XML模式验证XML片段 文章底部指出:

    注意:只有类型声明和 XML中的顶级元素 根据XML验证架构 图式。子元素被认为是 本地的,因此不能 验证。为了验证 子元素,声明顶级 元素并引用它。

    我相信那一段有错,目的是说明 top-level elements in the XML schema document/fragment are validated against an XML Schema

    因为Microsoft代码示例在顶层(而不是在文档中任意启动)启动它的片段,所以它使用验证。不过,在我的例子中,我采用了中间文档结构。

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


    解决方法/解决方案

    解决方法是将片段塞进顶级元素中,以进行验证。

    换句话说,如果我处理的是XHTML片段:

    <div>MY FRAGMENT</div>
    

    我可以把它包装起来 conform to the XHTML Strict Schema AS:

    <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>
    

    这个解决方案对我有效,所以我将在过渡期间使用它;我还不确定是否存在更好的解决方案。