Xsd 为什么扩展只能放在simpleContent和complexContent容器中?

Xsd 为什么扩展只能放在simpleContent和complexContent容器中?,xsd,Xsd,我很难理解XSD中定义类型扩展和限制的格式的一些细微差别。根据报告: simpleContent将“纯文本复杂类型或简单类型的扩展或限制定义为内容,不包含任何元素” complexContent定义了“仅包含混合内容或元素的复杂类型的扩展或限制” 我不清楚的是,为什么XSD需要在这些容器中包含扩展和限制,而且为什么只有扩展和限制需要它。如果所有“内容”都必须在容器中定义,对我来说会更有意义,但事实并非如此——对于基类型,上下文t(sequences等)被定义为complexType容器的直接

我很难理解XSD中定义类型扩展和限制的格式的一些细微差别。根据报告:

  • simpleContent
    将“纯文本复杂类型或简单类型的扩展或限制定义为内容,不包含任何元素”
  • complexContent
    定义了“仅包含混合内容或元素的复杂类型的扩展或限制”
我不清楚的是,为什么XSD需要在这些容器中包含扩展和限制,而且为什么只有扩展和限制需要它。如果所有“内容”都必须在容器中定义,对我来说会更有意义,但事实并非如此——对于基类型,上下文t(
sequence
s等)被定义为
complexType
容器的直接子级

以我看来过于冗长的:


为什么不能这样写呢


还是像这样



我想这一定是有原因的,但我找不到任何线索来解释原因。

我不认为你会找到任何有用的复杂类型XML语法的设计原理。我只想说,那些设计XML语法的人通过你提到的元素来解决一些技术问题您可能想知道simpleContent和complexContent解决了哪些技术难题,这是一个合理的问题,但我怀疑是否有人愿意深入研究XSD的设计记录,这是回答这个问题所必需的


一个简单的观察:扩展和限制的合法子级取决于父级是simpleContent还是complexContent。这是通过使用simpleContent和complexContent类型的本地声明来实现的,没有它们是不可能的——至少,如果不彻底重新设计XML synt是不可能的ax.

以C.M.斯珀伯格·麦奎因的答案为基础,我认为有些(如果不是更多的话)与语言的局限性有关(我猜是“技术困难”的参考);因为大多数语法试图证明它们足够好,可以定义自己,想象一下在“模式对模式”中实际上能做的是多么少,考虑到我们在1.0版中仍然“享受”的局限性

许多人相信,他们可以通过对照验证XSD的XML来真正验证XSD,但事实并非如此

许多XML模式设计都提出了与您相同的问题;答案通常是,作者希望通过绕过语言中的限制来最大化其模式规范的约束功能

不知怎的,我相信如果1.0中的特性与1.1相似,那么语法就会不同;规范不容易理解


为了使它更丰富,我还将研究其他模式语言规范,如RelaxNG或Schematron;也许是一些有争议的讨论。。。Rick Jelliffe接受XSD可能是一本不错的读物

如果转到,则
complexContent
simpleContent
中不包含任何
限制
元素。这是打字错误还是因为它们都包含在
simpleType
元素中?我知道这个问题很老,但您的第三个示例在技术上是有效的。正如在2.5.3 Empty Content()中所指定的,“没有任何simpleContent或complexContent定义的复杂类型被解释为限制任何类型的复杂内容的缩写。”@claytond自从我使用XSD以来已经有一段时间了,但我认为您引用的规则对我的示例不起作用,因为该规则仅适用于从
anytype
进行限制的情况,而我的示例是从type
personinfo
扩展而来的(至少这是目的)@KevinK您是对的。我忽略了“extends”参数,没有意识到它是用来表示基的。