0

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

4

1 に答える 1

1

ルート要素でデフォルトの名前空間を変更できます

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Liquid XML 2014 Developer Bundle Edition 12.1.2.5004 (http://www.liquid-technologies.com) -->
<fns:foo xmlns:fns="http://www.foo.org/Foo"
         xmlns='http://www.w3.org/2001/04/xmlenc#'>
    <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>
</fns:foo>

または、デフォルトの要素を数回変更して、すべてのプレフィックスを削除することもできます

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Liquid XML 2014 Developer Bundle Edition 12.1.2.5004 (http://www.liquid-technologies.com) -->
<foo xmlns="http://www.foo.org/Foo">
    <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#'>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>John Smith</KeyName>
        </KeyInfo>
        <CipherData>
            <CipherValue>DEADBEEF</CipherValue>
        </CipherData>
    </EncryptedData>
</foo>
于 2014-08-20T06:59:47.477 に答える