这是一个 xml 示例,我希望能够使用我的自制模式进行验证。整个EncryptedData
部分实际上是 XML 加密规范的语法。
<?xml version="1.0" encoding="UTF-8"?>
<Foo xmlns="http://www.foo.org/FOO">
<EncryptedData>
<EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:KeyName>John Smith</ds:KeyName>
</ds:KeyInfo>
<CipherData>
<CipherValue>DEADBEEF</CipherValue>
</CipherData>
</EncryptedData>
</Foo>
所以我尝试从 XML Encryption 派生并想出了这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'
xmlns:xenc11="http://www.w3.org/2009/xmlenc11#"
xmlns:foo="http://www.foo.org/Foo"
targetNamespace="http://www.foo.org/Foo">
<xsd:import namespace='http://www.w3.org/2001/04/xmlenc#' />
<xsd:import namespace='http://www.w3.org/2009/xmlenc11#' />
<xsd:element name="Foo">
<xsd:complexType>
<xsd:choice>
<xsd:element name="myItem" minOccurs="1" maxOccurs="unbounded" type="anyType"/>
<xsd:element ref="xenc:EncryptedData" minOccurs="1"
maxOccurs="unbounded" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
但是我的实际 xml 必须看起来像这样。我需要在导入所有 XML 加密元素时为它们添加名称空间的前缀。
<?xml version="1.0" encoding="UTF-8"?>
<foo
xmlns="http://www.foo.org/Foo"
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'/>
<xenc:EncryptedData>
<xenc:EncryptionMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:KeyName>John Smith</ds:KeyName>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>DEADBEEF</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</foo>
但是我也没有真正将导入更改为包含,因为目标名称空间不同。(我自己与 xml 加密模式中定义的不同)有没有办法做到这一点,这样你甚至可以在没有命名空间的情况下使用它?或者它只适用于前缀?