我想使用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以修复此错误?
答案 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文件,并遇到了相同的问题。
就我而言,解决方案包含多个步骤:
xmldsig-core-schema.xsd
(可从https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd下载)保存在与cXML架构文件相同的文件夹中xmlns:ds="uri:ds"
并替换为xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
<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"/>