XSD错误:未声明类型,或者不是简单类型

时间:2016-04-14 21:42:54

标签: xml xsd xsd-validation xml-validation

对于这个解释,我使用了两种不同的XSD:

customEntry.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="customEntry"
    targetNamespace="http://tempuri.org/customEntry.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/customEntry.xsd"
    xmlns:mstns="http://tempuri.org/customEntry.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"        
    >
  <xs:simpleType name="customEntry">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9_%./]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

element_ArtStyleSuffix.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="element_ArtStyleSuffix"
    targetNamespace="http://tempuri.org/element_ArtStyleSuffix.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/element_ArtStyleSuffix.xsd"
    xmlns:mstns="http://tempuri.org/element_ArtStyleSuffix.xsd"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >
  <xs:import namespace="http://tempuri.org/customEntry.xsd" schemaLocation="customEntry.xsd"/>

  <!-- Civilizations ArtStyleSuffix Enumeration -->
  <xs:simpleType name="enum_ArtStyleSuffix">
    <xs:restriction base="xs:string">
      <xs:enumeration value="_EURO"/>
      <xs:enumeration value="_AFRI"/>
      <xs:enumeration value="_AMER"/>
      <xs:enumeration value="_ASIA"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- ArtStyleSuffix GameData Schema Information -->
  <xs:element name="GameData">
    <xs:complexType>
      <xs:all>
        <xs:element minOccurs="0" maxOccurs="1" name="ArtStyleSuffix">
          <xs:annotation>
            <xs:documentation>
              Select a default ArtStyleSuffix or you may create your own custom one and place its TypeName here.
            </xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:union memberTypes="customEntry enum_ArtStyleSuffix"/>
          </xs:simpleType>
        </xs:element>
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

我的问题在于以下几行:

<xs:union memberTypes="customEntry enum_ArtStyleSuffix"/>

Visual Studio 2015社区正在抛出错误:

  

输入&#39; http://tempuri.org/element_ArtStyleSuffix.xsd:customEntry&#39;的是   未申报,或不是简单类型

对我来说它看起来像一个简单的类型,我认为输入线声明了它,所以也许我不明白&#34;导入&#34;完全导致我没有从输入行只收到联合行的任何错误。我这样做了吗?

1 个答案:

答案 0 :(得分:1)

这确实是一种简单的类型。但是,它未在当前XSD的目标命名空间中声明;它在导入的XSD的名称空间中声明。在导入的customEntry命名空间中引用http://tempuri.org/customEntry.xsd以消除错误...

具体来说,在主XSD的xs:schema元素上声明一个名称空间前缀:

xmlns:ce="http://tempuri.org/customEntry.xsd"

以便您可以在xs:union声明中使用它:

<xs:union memberTypes="ce:customEntry enum_ArtStyleSuffix"/>

你的错误就会消失。

旁注:它是可以接受的,但既不需要也不常规将命名空间命名为XSD文件的URL;考虑放弃.xsd扩展名。