2016-04-14 4 views
1

Для этого объяснения я использую 2 различных XSDs: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 сообщество бросает ошибку:

Type ' http://tempuri.org/element_ArtStyleSuffix.xsd:customEntry ' is not declared, or is not a simple type.

Это выглядит как простой тип ко мне, и я думал, что линия импорта объявил, поэтому, возможно, я не понимаю «импорт» полностью потому что я не получаю никаких ошибок из строки импорта только линии объединения. Правильно ли я делаю это?

ответ

1

Это действительно простой тип. Однако он не объявлен в целевом пространстве имен текущего XSD; он объявлен в пространстве имен импортированного XSD. Ссылочная customEntry в импортированной http://tempuri.org/customEntry.xsd имен, чтобы устранить ошибку ...

В частности, объявить префикс пространства имен на xs:schema элемент вашего главного XSD:

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

, так что вы можете использовать его в xs:union декларации :

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

и ваша ошибка исчезнет.

Боковое примечание: Это приемлемо, но не обязательно и не принято обозначать ваши пространства имен как URL-адреса для файлов XSD; рассмотрите возможность отмены расширения .xsd.