我有一个简单的XSD架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:myNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" id="myList">
<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:element name="abc">
<xs:complexType>
<xs:sequence>
<xs:element name="testElement" />
<xs:element name="Signature" type="ds:SignatureType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和XML文件,我要验证:
<?xml version="1.0" encoding="UTF-8"?>
<abc>
<testElement>
</testElement>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>value1</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>value2</SignatureValue>
<KeyInfo><KeyName/></KeyInfo>
</Signature>
</abc>
我使用xmllint
,我收到以下错误:
file.xml:5: element Signature: Schemas validity error : Element '{http://www.w3.org/2000/09/xmldsig#}Signature': This element is not expected. Expected is ( Signature ).
file.xml fails to validate
我对XML命名空间做错了什么?是XSD还是XML中的问题?
答案 0 :(得分:3)
自您在架构中声明
<xs:element name="Signature" type="ds:SignatureType"/>
它希望<Signature>
没有绑定到任何命名空间(与导入的模式中声明的命名空间不同)。
您似乎想要插入<Signature>
命名空间中定义的"http://www.w3.org/2000/09/xmldsig#"
,因此您应该在模式中使用以下内容:
<xs:element ref="ds:Signature" />