-1

これが私の問題です。いくつかの値を持つxmlファイルがあり、このファイルは署名された証明書です。私の xsd スキーマ ファイルは値のみを処理する方法を知っていますが、署名行を追加するとスキーマは失敗します。エラー: 要素 'Header' には、名前空間 ' http://www.w3.org/2000/09/xmldsig# ' に無効な子要素 'Signature' があります。「署名」が期待される可能な要素のリストは、次の私のコードです、ありがとう:)

ファイル test.xml:

<Header>
<tank>
    <code>1</code>
    <level>0</level>
</tank>

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
        ...
    <SignedInfo>
</Signature>
</Header>

SchemaTest.xsd:

<?xml version="1.0"?>
<xs:schema id="SchemaTest"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefalut="qualified"
attributeFormDefault="unqualified">
<xs:element name="Header">
    <xs:complexType>
    <xs:sequence>
        <xs:element name="tank">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="code"/>
            <xs:element name="level"/>
            </xs:sequence>
        </xs:complexType>
        </xs:element>           
        <xs:element name="Signature">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="SignedInfo">
                    <xs:complexType>
                    <xs:sequence>
                    </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
        </xs:element>
        </xs:sequence>
        </xs:complexType>
</xs:element>
</xs:schema>
4

1 に答える 1

1

Signature 名前空間を記述するには、2 つ目のスキーマが必要です。次のコードは、2 つの異なる名前空間に基づく xml ファイルの簡単な例を作成します。

ここで 2 番目の名前空間スキーマ ...

<?xml version="1.0" encoding="UTF-8"?>
<!-- second namespace schema -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://my.second.namespace" 
    xmlns:tns="http://my.second.namespace" 
    elementFormDefault="qualified">
    <element name="SomethingElse" type="string"></element>
</schema>

メイン名前空間のスキーマ ...

<?xml version="1.0" encoding="UTF-8"?>
<!-- first namespace schema -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://my.first.namespace" xmlns:tns="http://my.first.namespace"
    xmlns:S="http://my.first.namespace"      
    xmlns:T="http://my.second.namespace"
        elementFormDefault="qualified">
    <import namespace="http://my.second.namespace"
        schemaLocation="./SecondNamespaceSchema.xsd"/>
    <element name="Root">
        <complexType>
            <sequence>
                <element name="Head">
                    <complexType>
                        <sequence>
                            <element name="Something" type="string"></element>
                            <element ref="T:SomethingElse"/>
                        </sequence>
                    </complexType>
                </element>
                <element name="Body" type="string"></element>
            </sequence>
        </complexType>
    </element>
</schema>

...そして、すべてをまとめたサンプルxml。

<?xml version="1.0"?>
<!-- validatable xml file - proved with eclipse validator -->
<S:Root xmlns:S="http://my.first.namespace"
    xmlns:T="http://my.second.namespace" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://my.first.namespace ./Sample.xsd">
   <S:Head>
        <S:Something/>
        <T:SomethingElse/>
   </S:Head>
   <S:Body>
   </S:Body>
</S:Root>
于 2013-09-16T07:00:12.377 に答える