XML模式:';参考';或';名称';必须存在于本地元素声明中
我正在创建一个XML架构,但我的所有元素都会发生以下错误: 本地元素声明中必须存在“ref”或“name”之一 我不明白,因为我的XSD文档中有一个XML模式:';参考';或';名称';必须存在于本地元素声明中,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我正在创建一个XML架构,但我的所有元素都会发生以下错误: 本地元素声明中必须存在“ref”或“name”之一 我不明白,因为我的XSD文档中有一个名称或ref,您可以在这里看到: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo"> <xsd:impo
名称
或ref
,您可以在这里看到:
<?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>
您可以在这里找到我的balisexrm.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>
错误告诉您问题的确切原因: 本地元素声明中必须存在“ref”或“name”之一 所以
<xsd:element xmlns:ns0="http://NamespaceTest.com/balisesXrm"
ns0:ref="balisesXrmType"/>
现在您将拥有一个@ref
属性,因为错误表明您丢失了该属性。您尚未提供完整的MCVE,但这看起来可能已关闭。通常,引用的元素不会有类型
后缀,因此您的意思可能是
<xsd:element ref="balisesXrm"/>
或
您的XSD还有太多其他问题无法在一个问题中解决,但这个答案至少可以让您克服当前的问题。谢谢您的回答。实际上,我在本地使用了一个名称空间,因为当我导入我的balisesXrm.xsd(正如我编辑的那样)时,出现了一个新的错误:没有声明前缀“b”(我在元素中删除了名称空间创建,并将我的所有balisesXrm重命名为b:balisesXrm)。我没有指定的是我使用XSLT文档来生成此架构。很抱歉,我最初为您声明了一个新的名称空间前缀,
b
,然后才意识到您已经为此使用了ns0
。我已将答案更新为使用您的原始ns0
。当然,请注意,名称空间前缀仅通过其与完整名称空间URI的关联来获得其重要性,但我们必须正确绑定b
或ns0
。现在是。谢谢。XML名称空间前缀定义的范围仅扩展到声明元素所包含的元素;它不扩展到导入xsd。您的balisesXrm.xsd没有xs:element
声明balisesXrm
;它只有一个类型声明。重新阅读我写的关于元素与类型的文章。在您最近添加的导入XSD中,考虑用“<代码>类型< /代码>后缀命名您的类型,然后使用‘’来引用它。好的,我明白了。非常感谢你的帮助。
<xsd:element ref="balisesXrm"/>
<xsd:element ref="ns0:balisesXrm"/>
<xsd:element name="balisesXrm" type="ns0:balisesXrmType"/>