XML模式:本地元素声明中必须存在“ ref”或“ name”

时间:2018-07-06 11:35:03

标签: xml xsd xsd-validation xml-validation

我正在创建XML模式,但是我的所有元素都发生以下错误:

  

本地元素声明中必须存在“ ref”或“ name”之一。

我不明白,因为XSD文档中存在nameref,如您所见:

<?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 :(得分:2)

有错误告诉您确切的问题:

  

本地元素声明中必须存在“ 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属性 value 上,而不是 name

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

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

您的XSD还有太多其他问题无法解决,但是这个答案至少可以使您克服当前的问题。