2

为什么'ref'在这种情况下不起作用:

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element ref="Size"/>
    </xs:sequence>
</xs:complexType>

元素 Size 有本地作用域,不能在本地复用吗?

编辑:上面的案例可能没有多大意义。考虑下面的案例,有没有办法重用“大小”的现有定义:

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="teamLeads">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="Size"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
4

2 回答 2

3

您只能引用顶级元素。

{term}(顶级)元素声明·解析·由ref[属性]的·实际值·。

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#declare-element(见框中的最后一部分)

于 2013-01-02T07:36:36.740 回答
1

Why Does not 'ref' work in this case

因为您试图定义相同的元素两次。即使您不使用 ref 但 name 它也会出错!

就像这样声明元素两次一样好:

例子:

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
     </xs:sequence>
  </xs:complexType>

ComplexType 不能多次定义具有相同或不同类型的同名元素。 Warning : Elements with the same name and in the same scope must have the same type.

这可能是您收到错误的原因。消息可能不清楚,但原因是相同的。

编辑:在这种情况下,我们使用 maxOccurs 来完成这项工作!
如果你想使用 ref 那么对应的元素应该在不同的 XSD 中(通过命名空间导入)或者至少在当前的 ComplexType 之外

具有相同名称的不同层次结构中可以有多个元素!不同的类型!XSD 允许这样做!它必须允许!
当你使用这个名称的 ref 时,它应该考虑哪个元素?它将成为一个模棱两可的定义!不是吗?
这就是原因,XSD 不允许非全局元素作为参考。虽然您当前的代码没有多个具有相同名称的元素,但它可以有..

这是不同层次结构中具有不同类型的多个元素的示例:

<xs:complexType>
  <xs:sequence>
    <xs:element name="Name" type="xs:string"/>
    <xs:element name="Size">
      <xs:simpleType>
        <xs:restriction base="xs:integer">
          <xs:totalDigits value="1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name="something">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Size" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <!--<xs:element ref="Size" />-->
  </xs:sequence>
</xs:complexType>
于 2013-01-02T07:56:45.127 回答