これは、自作のスキーマで検証できるようにしたい 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 暗号化から派生させてみたところ、次のようになりました。
<?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暗号化スキーマで定義されたものとは異なります)名前空間なしで使用できるようにする方法はありますか? それともプレフィックスでのみ機能しますか?