Xsd 如何编写一个没有';我不在乎根元素叫什么?

Xsd 如何编写一个没有';我不在乎根元素叫什么?,xsd,Xsd,我的XML文件对子元素有限制,但根元素的名称实际上并不重要。如何将其合并到XSD中?我尝试过使用,但我得到: S4s elt无效内容。1:“架构”的内容无效。元素“any”无效、错位或出现频率过高 所以我试着从元素标记中删除名称,如下所示:,但随后我得到: “S4s att必须出现:属性‘name’必须出现在元素‘Element’中。”使用命名类型,并告诉验证器使用该类型在根元素开始验证 (这有一个可能的问题:XSD 1.0建议将其作为一个可能的调用选项,但不要求验证器提供它,因此无法保证您使用

我的XML文件对子元素有限制,但根元素的名称实际上并不重要。如何将其合并到XSD中?我尝试过使用
,但我得到:

S4s elt无效内容。1:“架构”的内容无效。元素“any”无效、错位或出现频率过高

所以我试着从元素标记中删除名称,如下所示:
,但随后我得到:


“S4s att必须出现:属性‘name’必须出现在元素‘Element’中。”

使用命名类型,并告诉验证器使用该类型在根元素开始验证

(这有一个可能的问题:XSD 1.0建议将其作为一个可能的调用选项,但不要求验证器提供它,因此无法保证您使用的验证器接口将支持它。这取决于您的验证器。至少值得一试。)


另一种说法是:您已经得到了您想要的东西,因为您的XSD模式从不关心文档实例的根元素被调用。XSD模式提供了一组元素和类型声明(以及其他内容)。可以请求验证器在文档中的任意点开始验证,而不仅仅是根,并且可以使用元素声明或类型声明,也可以使用“lax通配符模式”(最常见的默认设置)。如果您的验证器没有提供您想要的调用选项,那么这是您选择验证器的一个缺陷,而不是XSD中的一个漏洞。

我想我可能会使要求更加严格,并坚持使用特定的标记作为根元素。应用程序不关心这一事实并不是真正的问题


(对我来说)这种限制的存在似乎很奇怪,但我是XSDs新手。

我不确定我们对验证器有多大的控制权,因此感谢您的建议,但对于我们的需求来说,这可能不是一个好的选择。您正在调用验证器,但无法控制如何调用验证器?我想知道你是如何陷入这种情况的。你的“限制”是什么意思?你必须指定根属性的名称的限制。我想你是指根元素。如果是这样,那么你似乎是在误解下工作。您不仅不必在XSD模式中指定根元素的名称,而且不能指定根元素的名称:XSD没有约束文档根元素名称的构造。这是许多人抱怨的XSD的设计特点。如前所述,XSD的命名类型为您描述的场景提供了直接支持。“限制”是你想象出来的。谢谢你的进一步澄清,我现在明白你的解释了。但是,我不确定将使用什么进行验证,因此我正在寻找一种在文档顶部开始验证的解决方案(这可能是默认的),该解决方案不指定第一个元素的名称。事实上,这是不可能的限制。然而,我已经给出了上面的解决方法。你真的需要开始阅读人们对你的问题给出的答案。验证从何处开始,以及它是从元素声明还是类型定义开始,还是从搜索适当的元素声明开始(正如这里已经解释过的),由验证器的API或UI决定,而不是由XSD决定(XSD不负责指定API或UI)。您已经被告知如何实现您的情景;如果你真的坚持不去实现它,那么限制显然是你的,而不是XSD的。