2

我从客户那里得到了以下 XSD 位。它是跨越数十个文件的遗留模式的一部分。

<xs:element name="stateProvinceName">
  <xs:complexType mixed="true">
    <xs:attributeGroup ref="xml:attlist.global-attributes"/>
  </xs:complexType>
</xs:element>

我试图弄清楚他们真正想要什么。没有子元素,那么这个 'xs:mixed' 是什么意思呢?它应该是 simpleContent,还是没有内容?

我告诉他们应该使用更标准的结构,例如

<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"/>
4

3 回答 3

5

这两种类型在表面上可能是等价的,但它们的可扩展性是不同的。使用 xs:string 的简单内容类型允许通过例如使用正则表达式约束字符串来细化类型,而使用没有元素的混合复杂内容类型允许通过向模型添加元素来细化。

于 2012-09-18T20:56:54.527 回答
2

使用mixed空内容模型是完全标准的。如果你不喜欢他们的内容模型,你需要一个不同的论点。

一般来说,mixed="true"表示在给定复杂类型的子元素中允许字符内容;在这种情况下,由于内容模型中没有子元素,因此父元素的唯一合法内容将是字符数据、评论和处理指令。结果将是元素声明接受相同的元素集,就像如果元素使用复杂类型类型化且简单内容声明为xs:string.

混合内容和字符串之间的选择是一个设计决定。一般来说,混合内容更适合自然语言散文,即使元素的初始设计没有预见到对子元素的需求。一般来说,xs:string如果作为一组期望值的限制的基础,更容易使用。(如果您想限制stateProvinceName仅接受特定邮政服务定义的代码,xs:string则比混合内容更适合您的工作。)

于 2012-09-18T16:54:50.307 回答
0

这意味着您有一个名为的元素,该元素stateProvinceName具有一个或多个属性(由 定义xml:attlist.global-attributes),其内容是字符串。照原样,它与您推荐的结构没有什么不同。

然而,正如@Michael Kay 所指出的,它们的潜在区别在于它们的可扩展性。

于 2016-03-16T18:20:57.490 回答