具有相同名称且具有不同类型的多个元素将显示在模型组中

时间:2014-10-23 09:00:36

标签: xml xsd xsd-validation

我写了关于我的问题,但现在我显示了所有代码 xml文件

<?xml version="1.0"?>
<Purchase    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://NamespaceTest.com/Purchase Main.xsd"
               xmlns="http://NamespaceTest.com/Purchase">

  <element style="ide">it can't contain other elements</element>
  <element style="rem">it can contain some other <subelement>elements</subelement></element>
  <element style="rem"> this style can contain other<subelement> elements</subelement></element>
</Purchase>

和Main.xsd文件

<?xml version="1.0" encoding="utf-16"?>
<xs:schema elementFormDefault="qualified"
           targetNamespace="http://NamespaceTest.com/Purchase"
           xmlns:pur="http://NamespaceTest.com/Purchase"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="Purchase">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="pur:ide_group" maxOccurs="1"/>
        <xs:group ref="pur:rem_group"  maxOccurs="2" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>


  <xs:group name="ide_group">
    <xs:sequence>
      <xs:element name="element" type="pur:ide_type"/>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="ide_type" mixed="true">
    <xs:attribute name="style" type="pur:ide_list"/>
  </xs:complexType>
  <xs:simpleType name="ide_list">
    <xs:restriction base="xs:token">
      <xs:enumeration value="ide"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:group name="rem_group">
    <xs:sequence>
      <xs:element name="element" type="pur:rem_type"/>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="rem_type" mixed="true">
    <xs:sequence>
      <xs:element name="subelement"/>
    </xs:sequence>
    <xs:attribute name="style" type="pur:rem_list"/>
  </xs:complexType>
  <xs:simpleType name="rem_list">
    <xs:restriction base="xs:token">
      <xs:enumeration value="rem"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

我有错误:cos-element-consistent:类型'#AnonType_Purchase'出错。名称为“element”且具有不同类型的多个元素显示在模型组中。 我的问题是xml文件具有相同名称但风格不同的元素,我需要制定依赖于元素样式的规则。

1 个答案:

答案 0 :(得分:1)

您有几个选择:

  • 如果您可以使用XSD 1.1,您可以使用条件类型赋值或断言对具有相同名称和声明类型的兄弟元素强加不同的约束。

  • 您可以修改XML的设计,以便为您拥有的不同元素类型使用不同的元素类型名称。 (显然它们是不同的元素类型:你想为它们分配不同的类型。为什么用相同的名称来调用它们,因为它们不同?)

使用XSD,你不能做的是声明具有不同类型的同名兄弟元素;语言要求通过仅考虑从验证根到元素的路径来确定任何元素的声明类型。