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

时间:2015-06-18 19:59:44

标签: xml xsd xml-validation

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

  

src-resolve:无法将名称'ds:Signature'解析为'元素   声明'组件

我是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>

如何修改XSD以修复此错误?

4 个答案:

答案 0 :(得分:8)

如果您的xmldsig-core-schema.xsd与XSD在同一目录中,如果this XSD相同,那么您就不应该收到有关未能解决ds:Signature的错误。

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

  

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

试试这个XSD作为测试;它直接从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>

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

答案 1 :(得分:1)

作为替代方案,您可以在本地缓存xmldsig-core-schema.xsd,将其放在xsd架构的同一目录中,然后让您原来的

    <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>

这将解决从W3C网站导入文件的问题,并节省执行时间。

答案 2 :(得分:0)

我只是使用Visual Studio 2019从cXML DTD文件生成了XSD文件,并遇到了相同的问题。

就我而言,解决方案包含多个步骤:

  1. 将数字签名架构文件xmldsig-core-schema.xsd(可从https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd下载)保存在与cXML架构文件相同的文件夹中
  2. 搜索所有出现的xmlns:ds="uri:ds"并替换为xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
  3. 查找并删除所有<xs:import namespace="uri:ds" />的事件

完成这些步骤后,cXML模式文件得到验证,并且我能够使用以下命令生成C#类:

xsd /c cXML.xsd xmldsig-core-schema.xsd

注意: xsd工具需要传入两个模式。

答案 3 :(得分:0)

我通过修改以下行更新了 .xsd 文件:

    <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
    schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>