Схема XML: 'ref' или 'name' должны присутствовать в объявлении локального элемента - PullRequest
0 голосов
/ 06 июля 2018

Я создаю схему XML, но для всех моих элементов возникает следующая ошибка:

Один из 'ref' или 'name' должен присутствовать в объявлении локального элемента.

Я не понимаю, потому что у меня есть name или ref в моем документе XSD, как вы можете видеть здесь:

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo">
<xsd:import namespace="http://NamespaceTest.com/balisesXrm" schemaLocation="balisesXrm.xsd"/>
<xsd:import namespace="http://www.moss.fr/2011/connecteur_xrm"/>

<xsd:complexType xmlns="urn:SBEGestionZonesAeriennesSYSCA-schema" xmlns:SBEGestionZonesAeriennesSYSCA="urn:SBEGestionZonesAeriennesSYSCA-schema" name="typeAssociation">
    <xsd:sequence>
        <xsd:element xmlns:ns0="http://NamespaceTest.com/balisesXrm" ns0:ref="balisesXrmType"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:element name="plugin">
  <xsd:complexType>
     <xsd:sequence>
        <xsd:element xmlns:ns0="http://www.moss.fr/2011/connecteur_xrm" ns0:name="xrm:header" type="header"/>
     </xsd:sequence>
  </xsd:complexType>
</xsd:element>

Вы можете найти здесь мой документ balisesXrm.xsd:

<?xml version="1.0" encoding="UTF-8"?>


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       targetNamespace="http://NamespaceTest.com/balisesXrm"
       xmlns:b="http://NamespaceTest.com/balisesXrm">


<xsd:complexType name="balisesXrm">
    <xsd:choice>
        <xsd:sequence>
            <xsd:element name="attribut" />
            <xsd:element name="variable" />
            <xsd:element name="param" />
            <xsd:element name="java" />
            <xsd:element name="historisation-date" />
        </xsd:sequence>
    </xsd:choice>
</xsd:complexType>

1 Ответ

0 голосов
/ 06 июля 2018

Ошибка говорит вам именно о проблеме:

Один из 'ref' или 'name' должен присутствовать в объявлении локального элемента.

Так что для

  <xsd:element xmlns:ns0="http://NamespaceTest.com/balisesXrm" 
               ns0:ref="balisesXrmType"/>

удалить ns0 из @ns0:ref

  <xsd:element ref="balisesXrmType"/>

и теперь у вас будет атрибут @ref, так как ошибка указывает, что вы пропали без вести. Вы не предоставили полный MCVE, но, скорее всего, это не так. Обычно указанный элемент не имеет суффикса Type, поэтому, возможно, вместо этого вы имеете в виду

  <xsd:element ref="balisesXrm"/>

обратите внимание, что для ссылки на balisesXrm в другом пространстве имен, объявите префикс пространства имен для этого пространства имен, xmlns:ns0="http://NamespaceTest.com/balisesXrm", локально или лучше, на корневом уровне, как вам, вероятно, понадобится в другом месте, а затем используйте его на @ref атрибут значение , а не имя :

  <xsd:element ref="ns0:balisesXrm"/>

или

  <xsd:element name="balisesXrm" type="ns0:balisesXrmType"/>

Слишком много других проблем с вашим XSD для решения в одном вопросе, но этот ответ, по крайней мере, позволит вам преодолеть текущую проблему.

...