我的 xsd 架构有什么问题?它给出类型元素未在包含另一个 xsd 文件时声明

Whats wrong in my xsd schema ? It gives type element is not declared on include of another xsd file

我正在尝试使用模式验证 xml,但问题是 xsd 无效,我尝试测试它是否有效,它给出错误 XSD 模式错误:未声明类型 'testNamespaces:eltyp_string035'。 我验证模式的代码在这里:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Schema;

namespace testingXmlValidation
{
    class Program
    {
        static StringBuilder errors = new StringBuilder();
        static void Main(string[] args)
        {

                string xsdPath = null;
                 xsdPath = "C:/Users/testing/a.xsd";
                elementName = "SpeTrans";

                try
                {
                    XmlSchemaCollection sc = new XmlSchemaCollection();
                    sc.Add("testNamespaces", xsdPath);
                    Console.WriteLine("No Schema error.");
                }
                catch (XmlSchemaException ex)
                {
                    Console.WriteLine("XSD schema Error: {0}", ex.Message);
                }

                Console.ReadKey();       

         }  
    }

}

我的主要 xsd 文件在下面 看来问题出在这个包含或文件 command.xsd 中,因为它包含 "eltyp_string035" 声明 :

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Designer Edition 13.2.0.5980 (http://www.liquid-technologies.com)-->
<!-- Version 1.0.1  du 14/09/2015: TypNoiSuiviE à TypNotSuiviE -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="testNamespaces">
    <xs:include schemaLocation="C:/Users/ACER/Desktop/KT-iNDIA/September/24thseptember2015-KtIndia/Shakhar24092015/xsdFile/common.xsd" />
    <xs:element name="trans">                
                <xs:element name="ContDest" type="eltyp_string035" minOccurs="0" xmlns="testNamespaces">
                    <xs:annotation>
                        <xs:documentation>Nom du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="MailDest" type="eltyp_string035" minOccurs="0" xmlns="testNamespaces">
                    <xs:annotation>
                        <xs:documentation>Email du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TelDest" type="eltyp_string020" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Téléphone du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>                   
                <xs:element name="ValDecAssu" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Valeur Assurance En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDevAssu" minOccurs="0" default="EUR">
                    <xs:annotation>
                        <xs:documentation>Devise valeur Assurance</xs:documentation>
                    </xs:annotation>
</xs:schema>

和common.xsd是:

  <?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Designer Edition 13.1.0.5909 (http://www.liquid-technologies.com)-->
<!--Version 1.0.1 du 24/06/2015  -->
<!--Version 1.0.2 du 07/07/2015  -->
<!--Version 1.0.3 du 16/07/2015  -->
<!--Version 1.0.4 du 21/07/2015  - Correction liste des trans/modtrans/Col -->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!--Element De base -->

    </xs:simpleType>
    <xs:simpleType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="eltyp_string032">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="32" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="eltyp_string035">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="35" />
        </xsd:restriction>
    </xs:simpleType>

</xs:schema>
<!--Fin des ꭩments de type complexes-->

为什么 main.xsd 无法获取 "eltyp_string035"

的声明

在您的主 XSD 中,将 xmlns="testNamespaces" 添加到您的 xs:schema 元素。

当您编写 type="eltyp_string035" 时,XSD 处理器将 "eltyp_string035" 视为限定名称,即具有命名空间。由于您的架构未定义默认命名空间,因此 "eltyp_string035" = {}eltyp_string035.

您将一个没有 targetNamespace 的架构包含在一个有 targetNamespace 的架构中。这有时被称为 chameleonic 包含,这意味着包含模式中的所有组件都采用包含模式的名称空间(此处为 testNamespaces)。因此,它寻找 {testNamespaces}eltyp_string035.

这些是您更正的架构;将它们与您拥有的进行比较,并阅读一些关于 XML 名称空间的内容。

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Designer Edition 13.2.0.5980 (http://www.liquid-technologies.com)-->
<!-- Version 1.0.1  du 14/09/2015: TypNoiSuiviE à TypNotSuiviE -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="testNamespaces" xmlns="testNamespaces">
    <xs:include schemaLocation="common.xsd" />
    <xs:element name="Spetrans">
        <xs:complexType>
            <xs:sequence minOccurs="1">
                <xs:element name="TypNotSuiviE" minOccurs="0" default="0">
                    <xs:annotation>
                        <xs:documentation>Forçage Type de notification pour le suivi « Expéditeur »</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:totalDigits value="1" />
                            <xs:enumeration value="0" />
                            <xs:enumeration value="1" />
                            <xs:enumeration value="2" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="TypNotSuiviO" minOccurs="0" default="0">
                    <xs:annotation>
                        <xs:documentation>Forçage Type de notification pour le suivi « Donneur d’ordre »</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:totalDigits value="1" />
                            <xs:enumeration value="0" />
                            <xs:enumeration value="1" />
                            <xs:enumeration value="2" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="TypNotSuiviD" minOccurs="1" default="0">
                    <xs:annotation>
                        <xs:documentation>Forçage Type de notification pour le suivi « Donneur d’ordre »</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:totalDigits value="1" />
                            <xs:enumeration value="0" />
                            <xs:enumeration value="1" />
                            <xs:enumeration value="2" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ContDest" type="eltyp_string035" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Nom du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="MailDest" type="eltyp_string035" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Email du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TelDest" type="eltyp_string020" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Téléphone du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="GsmDest" type="eltyp_string020" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Téléphone GSM du contact Destinataire</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ValDecAssu" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Valeur Assurance En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDevAssu" minOccurs="0" default="EUR">
                    <xs:annotation>
                        <xs:documentation>Devise valeur Assurance</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string003">
                            <xs:enumeration value="EUR" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDecDou" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Valeur Douane En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDevDou" minOccurs="0" default="EUR">
                    <xs:annotation>
                        <xs:documentation>Devise valeur Douane</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string003">
                            <xs:enumeration value="EUR" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDecRep" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Valeur déclarée CRBT En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDevRep" minOccurs="0" default="EUR">
                    <xs:annotation>
                        <xs:documentation>Devise valeur déclarée CRBT</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string003">
                            <xs:enumeration value="EUR" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="TypeRep" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Type de REP (Aller ou Retour) Ou bien  Type du SWAP déclaré (Aller ou Retour)
Valeur par défaut à vide.
SWPA = SWAP Aller, SWPR = SWAP Retour
REPA = REP Aller, REPR = REP Retour
</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string004">
                            <xs:enumeration value="" />
                            <xs:enumeration value="SWPA" />
                            <xs:enumeration value="SWPR" />
                            <xs:enumeration value="REPA" />
                            <xs:enumeration value="REPR" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="RepRet" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>N° Chronopost du  REP ou du SWAP retour 
Si le colis déclaré est un SWAP Aller, indiquer ici le N° du Retour. Si le colis déclaré est un REP Aller, indiquer ici le N° du Retour.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string013" />
                    </xs:simpleType>
                </xs:element>
                <xs:element name="RepDep" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>N° Chronopost du  REP ou du SWAP aller
Si le colis déclaré est un SWAP Retour, indiquer ici le N° du Aller. Si le colis déclaré est un REP Retour, indiquer ici le N° du Aller
</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string013" />
                    </xs:simpleType>
                </xs:element>
                <xs:element name="CptPart" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>information fourni par Chronopost</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DatDebRdv" type="Eltyp_DateAAAAMMJJHHMM" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation> Date de début de rendez-vous Sous la forme AAAAMMJJHHMM Uniquement pour les produits à livraison sur RDV</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DatFinRdv" type="Eltyp_DateAAAAMMJJHHMM" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation> Date de fin de rendez-vous Sous la forme AAAAMMJJHHMM Uniquement pour les produits à livraison sur RDV</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="LivExpVen" minOccurs="0" default="A">
                    <xs:annotation>
                        <xs:documentation>Jour de livraison souhaité pour les envois du vendredi
0 : Normal ,1: Lundi, 2: Mardi, 3: Mercredi, 4: Jeudi, 5: Vend et 6: Samedi 
« A » Déterminé par Mutualisation Expédition
</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string001">
                            <xs:enumeration value="0" />
                            <xs:enumeration value="1" />
                            <xs:enumeration value="2" />
                            <xs:enumeration value="3" />
                            <xs:enumeration value="4" />
                            <xs:enumeration value="5" />
                            <xs:enumeration value="6" />
                            <xs:enumeration value="A" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="GpsLivLat" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Coordonnées GPS du point à livrer : Latitude </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="GpsLivLon" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Coordonnées GPS du point à livrer : Longitude </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="InstPart1" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Informations libre émetteur</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="InstPart2" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Informations libre émetteur</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NumCR" type="eltyp_string011" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Informations libre émetteur</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="MonTransHT" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Montant du transport HT  En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="MonTransTTC" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Montant du transport TTC En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="MonTransTVA" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Montant du transport TVA En Centimes</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string009">
                            <xs:pattern value="[0-9]{9}" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="ValDevTrans" minOccurs="0" default="EUR">
                    <xs:annotation>
                        <xs:documentation>Devise valeur Assurance</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="eltyp_string003">
                            <xs:enumeration value="EUR" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="RefSwap" type="eltyp_string045" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Référence SWAP</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NumColEmet" type="eltyp_string035" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>N° interne du colis chez l'émetteur Ligne à disposition émetteur</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="RefExp" type="eltyp_string035" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Référence Expéditeur Ligne à disposition émetteur</xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

常见:

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2015 Designer Edition 13.1.0.5909 (http://www.liquid-technologies.com)-->
<!--Version 1.0.1 du 24/06/2015  -->
<!--Version 1.0.2 du 07/07/2015  -->
<!--Version 1.0.3 du 16/07/2015  -->
<!--Version 1.0.4 du 21/07/2015  - Correction liste des trans/modtrans/Col -->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <!--Element De base -->

    <xs:simpleType name="eltyp_string032">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="32" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string035">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="35" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string020">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="20" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string009">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="9" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string003">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="3" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string004">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="4" />
        </xsd:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string013">
        <xs:restriction base="xs:string">
            <xs:maxLength value="13" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string045">
        <xs:restriction base="xs:string">
            <xs:maxLength value="45" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string001">
        <xs:restriction base="xs:string">
            <xs:maxLength value="1" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="eltyp_string011">
        <xs:restriction base="xs:string">
            <xs:maxLength value="11" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Eltyp_DateAAAAMMJJHHMM">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
</xs:schema>
<!--Fin des ꭩments de type complexes-->

我找到了答案。事实上 xsd 代码没有任何问题,我在代码中故意保留了 targetNamespace="testNamespaces""xmlns="testNamespaces" 因为我得到了类型元素未声明的错误,并在这里找到了一些解决方案 link 但这不是我的问题。

我的问题是我在 Notepad++ 中打开了 xsd 文件,所以一些不可见的数据被附加到写入的文本中。所以当我打开由@Petru 并粘贴它,它可以工作。但我给他的只是我xsd档案的一小部分。但是当我将他的代码集成到我的大文件中时,它无法工作。

突然想到让我们在Visual Studio中打开.xsd,当我在那里打开它时,它可以工作。 :)