src-resolve:无法将名称'ds:Signature'解析为'element declaration'组件

bse*_*sel 5 xml xsd xml-validation

我想使用XSD文件进行模式验证.当我将XSD文件导入Eclipse而不运行验证类时,我有以下错误:

src-resolve:无法将名称'ds:Signature'解析为'element declaration'组件

我是XML和XSD验证过程的新手.虽然我在谷歌上寻找类似的问题,但我无法弄清楚这里有什么问题.

XSD文件如下:

 <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xerces="http://xerces.apache.org"
        xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
        xmlns:abc="http://abc.123.com" targetNamespace="http://abc.123.com"
        xmlns:xades141="http://uri.etsi.org/01903/v1.4.1#" elementFormDefault="qualified"
        attributeFormDefault="unqualified">
        <xs:import namespace="http://uri.etsi.org/01903/v1.3.2#" schemaLocation="XAdES.xsd"/>
        <xs:import namespace="http://uri.etsi.org/01903/v1.4.1#" schemaLocation="XAdESv141.xsd"/>
        <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
    <xs:complexType name="headerType">
        <xs:sequence>
            <xs:element name="doorNumber" type="xs:int"/>
            <xs:element ref="ds:Signature"/>
        </xs:sequence>
    </xs:complexType>
Run Code Online (Sandbox Code Playgroud)

我该如何修改XSD来修复此错误?

kjh*_*hes 8

如果xmldsig-core-schema.xsd与XSD位于同一目录中,并且XSD相同,那么您不应该收到有关无法解决的错误ds:Signature.

因此,我怀疑您的导入失败,并且您丢失或忽略了以下警告:

[警告] try.xsd:9:56:schema_reference.4:无法读取模式文档'xmldsig-core-schema.xsd',因为1)找不到文档; 2)文件无法阅读; 3)文档的根元素不是<xsd:schema>.

试试这个XSD作为测试; 它直接从URL加载xmldsig-core-schema.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
           xmlns:abc="http://abc.123.com"
           targetNamespace="http://abc.123.com"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
             schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>
  <xs:complexType name="headerType">
    <xs:sequence>
      <xs:element name="doorNumber" type="xs:int"/>
      <xs:element ref="ds:Signature"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我测试了上面的XSD,发现它消除了你看到的分辨率错误.