|
|
1
1
有一些事情正在发生,以及一些可能的解决方案。 您可以使用的解决方案将取决于您是否可以更改XML、XSD或两者。 下面是一些通过架构验证的XML:
关键区别在于,在XSD中,您没有在 http://www.me.com/orpm/kpi/automation/report 命名空间。我不完全确定发生了什么,但我认为在模式级别拥有模式属性会混淆事情。通过分配名称空间前缀ns0:来告诉验证器该名称空间中的kpireport和pattern都在,但name不在。 此解决方案可能不适用,因此另一个选项是调整您的模式以接受示例XML。下面是一个有效的模式:
需要注意的是,pattern属性现在被移到name value complexType中,并且该名称和值现在被指定为form=“qualified”。限定意味着这些元素需要名称空间前缀(在本例中,前缀是默认的,或者不需要)。 我不完全确定为什么需要这样做——我的XSD知识足以达到这一点,但我不太清楚到底发生了什么。我通常使用工具来生成我的模式,然后进行调整,直到我得到正确的结果。 希望这能帮助您,或者拥有更敏锐XSD技巧的人可以填补空白。 |
|
|
2
2
david是正确的,但解决这个问题的更好方法是通常将本地定义的元素定义为模式中的限定元素。XSD有一个可怕的默认值(这就是您的XSD不能按预期工作的原因),因此几乎所有工具都会生成一个空模式,如下所示:
这基本上与david建议的修复相同,但通过更改xsd默认值来实现,后者更为健壮。 对正在发生的事情的解释可能要花上一点时间才能包括在这里,而且可能没有那么多的兴趣。 |
|
|
3
2
好的,既然David要求这样做,下面是完整的解释:XSD中的元素声明可以是全局的,也可以是本地的。全局声明位于xs:schema下的级别上,本地声明是其他声明中的声明。定义的全局声明元素始终在架构的targetnamespace中定义(如果有)。另一方面,默认情况下,本地声明不在任何命名空间中(特别是,不在架构的targetnamespace中),除非您通过前面讨论的两个方法之一使它们“限定”。没有名称空间声明的元素的效果是文档必须如下所示(将“name”和“value”元素用作没有名称空间限定名的元素):
这不是很漂亮,很难使用和理解,所以这种混合合格和不合格元素的方式从来没有使用过(我绝对没有见过)。 |
|
|
J_Cus504 · 在单匹配语句中使用身份变换和多谓词来沉默节点 1 年前 |
|
|
surge3333 · 使用PowerShell构建XML 1 年前 |
|
|
Sandeep · XSLT代码,用于根据条件提取元素值 1 年前 |
|
|
Reto · XSLT 3.0突发流-如何存储/获取另一个分支的值 1 年前 |
|
Ian Kemp · 如何从SelectXml调用本机XPath函数? 1 年前 |