Ambiguous XML schema

馋奶兔 提交于 2019-12-04 04:22:34

Regarding the error: that error message mentions a line that's not in the xsd you included, but these two lines in it are ambiguous:

<xs:element ref="important_tag" minOccurs="0"/>
<xs:any minOccurs="0"/>

The simplest example to show the ambiguity is if there was just one <important_tag>:

  <important_tag></important_tag>

The problem is that it could be interpreted as one "important_tag" and zero "any" tags (which is what you wanted), but it can also be interpreted as zero "important_tag" and one "any" tags. This is because the "any" tag can match any tag, including "important_tag".

I've read that the next version of XML Schema enables you to say what you meant: any tag except important_tag.

Matching the XML in two different ways is similar to the regular expression "a*a*" matching "a" in two different ways (one first "a"; or one second "a"). This ambiguity used to be called "non-deterministic" in the XML spec for DTDs, but the XML Schema spec calls it the Unique Particle Attribution rule (UPA), meaning that you should be able to tell which part of the schema gets each part of the XML document.

There is a great article on MSDN that talks about desigining extensible schemas, which you can find here, I suggest you go through it all, but specifically to your point it explains why you're getting this error in point 2. under "Using XML Schema to Design a Versionable XML Format" (you can search for "non-deterministic" and get straight there.

Basically, once you have an xs:any element the validator cannot assume anything about the other sibling elements, so - you might well have a definition for important_tag that does not require those mandatory attributes and so those elements cannot be validated

With your requirments (things like "Any other tag doesn't have to conform to any definition."), Schematron, which is based on rules ("this must be true", "that must be false") is may be a better solution than W3C Schema, which is more "everything must be like that".

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!