1

如何删除 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>

我的第二个.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
4

1 回答 1

1

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

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

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

rty由于您是在本地定义的,因此您无法使用替换组来做事;替换组的头必须在全局范围内定义。

为了满足您的需求,您必须完全重写您的 XSD。更好地描述您想要实现的目标以及您对 XSD 创作施加的任何限制(例如,使用替换组、重新定义或使用 XSD 的上下文)可能有助于其他人为您提供更好的答案.

于 2012-06-30T06:44:47.443 回答