我从客户那里得到了以下XSD位。它是传统架构的一部分,涵盖了数十个文件。
<xs:element name="stateProvinceName">
<xs:complexType mixed="true">
<xs:attributeGroup ref="xml:attlist.global-attributes"/>
</xs:complexType>
</xs:element>
我试图找出他们真正想要的东西。没有子元素,所以这个&#39; xs:mixed&#39 ;?的含义是什么?它应该是简单的内容,还是没有内容?
我告诉他们应该使用更多的标准结构,例如
<xs:element name="stateProvinceName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="xml:attlist.global-attributes"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
但他们不确定这意味着什么。两个模式都接受
<stateProvinceName ID="345643">California</stateProvinceName>
和
<stateProvinceName ID="345643"/>
答案 0 :(得分:5)
这两种类型在表面上可能是等价的,但它们的可扩展性是不同的。使用简单内容类型的xs:string允许通过约束字符串(例如使用正则表达式)来细化类型,而使用不带元素的混合复杂内容类型允许通过向模型添加元素来进行细化。
答案 1 :(得分:2)
将mixed
与空内容模型一起使用是完全标准的。如果你不喜欢他们的内容模型,你需要一个不同的论点。
通常,mixed="true"
表示在给定复杂类型的子元素中允许使用字符内容;在这种情况下,由于内容模型中没有子元素,因此父元素的唯一合法内容将是字符数据,注释和处理指令。结果将是元素声明接受与使用复杂类型键入元素时相同的元素集,其中简单内容被声明为xs:string
的扩展名。
混合内容和字符串之间的选择是一个设计决策。一般来说,混合内容对于自然语言散文更好,即使元素的初始设计没有预见到子元素的需要。通常,xs:string
作为限制期望值集合的基础更容易使用。 (如果您想约束stateProvinceName
仅接受特定邮政服务定义的代码,xs:string
比混合内容更适合您的工作。)
答案 2 :(得分:0)
这意味着您有一个名为stateProvinceName
的元素,它具有一个或多个属性(由xml:attlist.global-attributes
定义),其内容为字符串。原样,它与您推荐的结构没有什么不同。
他们的潜在差异是他们的可扩展性,@Michael Kay noted。