通过限制模式无效的粒子推导

时间:2012-06-29 13:30:16

标签: xsd schema

如何在xsd中删除以下警告。 mymain.xsd引用mysecond.xsd

我的main.xsd

<?xml version="1.0" encoding="UTF-8"?><xsd:schema elementFormDefault="qualified" targetNamespace="http://abc.com" version="2.0" xmlns:tyu="http://abc.com" xmlns:my="def.com"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:import namespace="def.com" schemaLocation="mysecond.xsd"/>
  <xsd:complexType name="myType">
    <xsd:complexContent>
     <xsd:restriction base="my:myType">
      <xsd:sequence>
        <xsd:element minOccurs="0" name="rty" type="tyu:myagainType"/>
      </xsd:sequence>
    </xsd:restriction>
   </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="myagainType">
    <xsd:complexContent>
     <xsd:restriction base="my:myagainType">
      <xsd:sequence>
        <xsd:element minOccurs="1" name="uid">
        <xsd:simpleType>
           <xsd:restriction base="xsd:string">
          <xsd:maxLength value="1"/>
           </xsd:restriction>
        </xsd:simpleType>
        </xsd:element>
      </xsd:sequence>
    </xsd:restriction>
   </xsd:complexContent>
  </xsd:complexType>  
</xsd:schema>

mysecond.xsd

<?xml version="1.0" encoding="UTF-8"?><xsd:schema elementFormDefault="qualified" targetNamespace="def.com" version="2.0" xmlns:my="def.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:complexType name="myagainType">
    <xsd:sequence>
      <xsd:element minOccurs="0" name="klo" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="myType">
    <xsd:sequence>
      <xsd:element minOccurs="0" name="rty" type="my:myagainType"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

警告

Warning 1   Invalid particle derivation by restriction - 'Derived element 'http://abc.com:rty' is not a valid restriction of base element 'def.com:rty' according to Elt:Elt -- NameAndTypeOK.'.    D:\files\mymain.xsd 3   4

1 个答案:

答案 0 :(得分:1)

简短的回答,你不能。首先,rty mySecond.xsd在本地定义和限定,并且位于与rty中的“等效”main.xsd不同的名称空间中,后者也在本地定义,在不同的命名空间中限定。

如果您阅读第2部分的XML Schema规范,您将获得适用于有效限制的每个规则的解释。在您的情况下,您要么使用相同的命名元素(以“非限定”rty元素开头),要么使用替换组的成员。

你显然不想要相同的元素,因为它会给你相同的内容模型 - 你只有一个元素。人们使用限制的一个原因是减少内容模型(从列表中删除元素)和/或调整粒子的min / maxOccurs。

由于您在本地定义rty,因此无法使用替换组执行操作;必须在全球范围内定义替代组的负责人。

为了满足您的需求,您必须完全重写XSD。更好地描述您正在尝试实现的内容以及您对XSD创作的任何限制(例如使用替换组,或重新定义,或使用XSD的上下文)可以帮助其他人为您提供更好的答案