0

我们有一个具有“implementationClass”属性的父元素。这个父元素有很多子元素,我们想在其中定义一个默认值。下面是父元素的定义:

<xsd:complexType name="serviceType">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:ID" />
        <xsd:element name="connection">
            <xsd:complexType>
                <xsd:attribute name="reference" type="xsd:IDREF" use="required" />
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="implementationClass" type="xsd:string" use="optional" />
</xsd:complexType>

要创建具有附加属性的子元素,我们需要使用“扩展”。要定义默认值,我们需要使用“限制”。但是,这两个是互斥的。

任何人都可以帮我弄清楚如何做到这一点?

提前致谢

4

1 回答 1

0

您可以通过一些中间类型实现“扩展”和“限制”的效果:

serviceType -> serviceTypeIntermediate -> serviceTypeResult

例如:

<xsd:complexType name="serviceTypeIntermediate">
  <xsd:complexContent>
    <xsd:extension base="serviceType">
      <xsd:sequence>
        <xsd:element name="something" type="xsd:String"/>
      <xsd:sequence>
    <xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="serviceTypeResult">
  <xsd:complexContent>
    <xsd:restriction base="serviceTypeIntermediate">
      ...
    <xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

但请注意以下几点:

(复杂内容的)扩展起作用,以便将新的子元素(在其中声明)作为序列添加到初始内容中。也就是说,您不能“扩展”那些已经在基类型中声明的子级。

限制中,您必须重新定义整个内容模型。但新内容必须与基本类型中定义的内容完全兼容。

于 2013-07-17T01:57:15.813 回答