-1

私のxmlファイルは次のとおりです

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <Info>
 <Pan>123</Pan>
 <Name>qwe</Name>
 <Email>qwe</Email>
 <City>qwe</City>
 <State>qwe</State>
 <AssessmentYear>2012</AssessmentYear>
 <MobileNo>1234</MobileNo>
 <Income-Salary>1234</Income-Salary>
 <Income-Other>1234</Income-Other>
 <TotalAmount>122</TotalAmount>
<Signature> 
<SignedInfo>
 <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
 <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"/><Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116"><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
Pan : <xsl:copy-of select="//Pan"/>

MobileNo : <xsl:copy-of select="//MobileNo"/>

TotalAmount : <xsl:copy-of select="//TotalAmount"/>
</xsl:template>
</xsl:stylesheet></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>FgbIIimTLIbd0Zpvq1zDrZse6aJg5bAE1/Q58cEkEvk=</DigestValue></Reference>
 </SignedInfo>
<SignatureValue>dy4QDco5NhXResncu0tUG5ylujDn9siIQSHjuX5HxH2gs70LpsO3KDWNvDXjpgkIySYfzJ/FdC6C
trkSySWRjhObqI8cbcP5VU/nL8pP21+3CO+gF1k884aeX3felpRy0FBBMTYBknQTunWCHvpHk927
ZHGvm6Hiej7iBKr3e1k=</SignatureValue>
</Signature>
</Info>

このxmlファイルの私のスキーマファイルは次のとおりです( c1.xsd )

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="C:\\xml\\c2.xsd"/>
<xs:element name="Info">
  <xs:complexType>

  <xs:sequence>
      <xs:element name="Pan" type="xs:string"/>
      <xs:element name="Name" type="xs:string"/>
      <xs:element name="Email" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="State" type="xs:string"/>
      <xs:element name="AssessmentYear" type="xs:gYear"/>
      <xs:element name="MobileNo" type="xs:unsignedLong"/>
      <xs:element name="Income-Salary" type="xs:unsignedLong"/>
      <xs:element name="Income-Other" type="xs:unsignedLong"/>
      <xs:element name="TotalAmount" type="xs:unsignedLong"/>
      <xs:element ref="ds:Signature"/>
 </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

c2.xsd(編集済み)

 <?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2000/09/xmldsig#">
<xs:element name="Signature">
     <xs:complexType>
      <xs:sequence>
        <xs:element name="SignedInfo">
         <xs:complexType>
          <xs:sequence>
             <xs:element name="CanonicalizationMethod">
              <xs:complexType>
               <xs:attribute name="Algorithm" type="xs:string" use="required"/>
              </xs:complexType>
             </xs:element>
             <xs:element name="SignatureMethod">
               <xs:complexType>
                 <xs:attribute name="Algorithm" type="xs:string" use="required"/>
               </xs:complexType>
             </xs:element>                
            <xs:element name="Reference">
             <xs:complexType>
               <xs:attribute name="URI" type="xs:string"/>
               <xs:all>
               <xs:element name="Transforms">
                 <xs:complexType>
                   <xs:sequence>
                     <xs:element name="Transform" type="xs:string">
                       <xs:complexType>
                         <xs:attribute name="Algorithm" type="xs:string" use="required"/>
                       </xs:complexType>
                      </xs:element>
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
               <xs:element name="DigestMethod">
                 <xs:complexType>
                   <xs:attribute name="Algorithm" type="xs:string" use="required"/>
                 </xs:complexType>
               </xs:element>
               <xs:element name="DigestValue" type="xs:hexBinary"/>
               </xs:all>
             </xs:complexType>
            </xs:element>
            </xs:sequence>
         </xs:complexType> 
        </xs:element> 
       <xs:element name="SignatureValue" type="xs:string"/>
      </xs:sequence>
     </xs:complexType>
</xs:element>
</xs:schema>

xml ファイルを検証すると、次の例外が発生します。

org.xml.sax.SAXParseException; systemId: file:/C://xml//c2.xsd; lineNumber: 22;
columnNumber: 37; s4s-elt-invalid-content.1: The content of '#AnonType_Reference
SignedInfoSignature' is invalid.  Element 'element' is invalid, misplaced, or oc
curs too often.

どこが間違っているのかわかりませんか?私のコードの間違いが正確にどこにあるのか誰にもわかりますか?
編集後のエラー 1

org.xml.sax.SAXParseException; systemId: file:/C://xml//c2.xsd; lineNumber: 22;
columnNumber: 15; s4s-elt-invalid-content.1: The content of '#AnonType_Reference
SignedInfoSignature' is invalid.  Element 'all' is invalid, misplaced, or occurs
 too often.
4

3 に答える 3

2

c2.xsd の 22 行目

         <xs:complexType>
           <xs:attribute name="URI" type="xs:string"/>
           <xs:element name="Transforms">

xs:elementの直接の子として表示することはできませんxs:complexTypexs:allxs:choiceまたはの中にある必要がありますxs:sequence

于 2012-05-28T05:41:23.133 に答える
1

私はあなたのファイルを試してみて、notepad ++に対していくつかのことを行って検証することができました:

  1. c:\reference なしで、インポートされた署名 xsd への参照を使用するように xsd を変更しました。これを行うには、インポートしたファイルを、インポート元の xsd と同じ場所にコピーしました。
  2. ds を指定する c2.xsd を別の属性、つまり dsig に変更しました
  3. w3 署名xsd から署名 xsd の w3c バージョンをダウンロードし、それをインポートで使用しました (ステップ 1)。
  4. 署名を指定するときに xmlns="http://www.w3.org/2000/09/xmldsig#" 行を含めるように出力 xml を変更しました。

以下のメモ帳++で検証に成功したxsdとxmlに注意してください。

XSD:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<xs:element name="Info">
  <xs:complexType>
<xs:sequence>
      <xs:element name="Pan" type="xs:string"/>
      <xs:element name="Name" type="xs:string"/>
      <xs:element name="Email" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="State" type="xs:string"/>
      <xs:element name="AssessmentYear" type="xs:gYear"/>
      <xs:element name="MobileNo" type="xs:unsignedLong"/>
      <xs:element name="Income-Salary" type="xs:unsignedLong"/>
      <xs:element name="Income-Other" type="xs:unsignedLong"/>
      <xs:element name="TotalAmount" type="xs:unsignedLong"/>
      <xs:element ref="dsig:Signature" minOccurs="0" maxOccurs="1" />
</xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

そしてXML:

<?xml version="1.0" ?>
 <Info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
 <Pan>123</Pan>
 <Name>qwe</Name>
 <Email>qwe</Email>
 <City>qwe</City>
 <State>qwe</State>
 <AssessmentYear>2012</AssessmentYear>
 <MobileNo>1234</MobileNo>
 <Income-Salary>1234</Income-Salary>
 <Income-Other>1234</Income-Other>
 <TotalAmount>122</TotalAmount>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
<SignedInfo>
 <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
 <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"/>
 <Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="text"/>
        <xsl:template match="/">
Pan : <xsl:copy-of select="//Pan"/>

MobileNo : <xsl:copy-of select="//MobileNo"/>

TotalAmount : <xsl:copy-of select="//TotalAmount"/>
        </xsl:template>
    </xsl:stylesheet>
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>FgbIIimTLIbd0Zpvq1zDrZse6aJg5bAE1/Q58cEkEvk=</DigestValue>
</Reference>
 </SignedInfo>
<SignatureValue>dy4QDco5NhXResncu0tUG5ylujDn9siIQSHjuX5HxH2gs70LpsO3KDWNvDXjpgkIySYfzJ/FdC6C
trkSySWRjhObqI8cbcP5VU/nL8pP21+3CO+gF1k884aeX3felpRy0FBBMTYBknQTunWCHvpHk927
ZHGvm6Hiej7iBKr3e1k=</SignatureValue>
</Signature>
</Info>
于 2012-05-28T09:15:50.507 に答える
0

あなたの c2.xsd は無効なままです。ComplexType 定義を見てください:

<complexType
  id=ID
  name=NCName
  abstract=true|false
  mixed=true|false
  block=(#all|list of (extension|restriction))
  final=(#all|list of (extension|restriction))
  any attributes
 >

 (annotation?,(simpleContent|complexContent|((group|all|
 choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?))))

</complexType>

属性は、group、all、choice、または sequence 要素の後に定義する必要があるため、<xs:element name="Reference">最初に を定義<xs:all>し、次にを定義するために順序を変更し<xs:attribute>ます。

      <xs:element name="Reference">
         <xs:complexType>
           <xs:all>
           <xs:element name="Transforms">
             <xs:complexType>
               <xs:sequence>
                 <xs:element name="Transform" type="xs:string">
                   <xs:complexType>
                     <xs:attribute name="Algorithm" type="xs:string" use="required"/>
                   </xs:complexType>
                  </xs:element>
               </xs:sequence>
             </xs:complexType>
           </xs:element>
           <xs:element name="DigestMethod">
             <xs:complexType>
               <xs:attribute name="Algorithm" type="xs:string" use="required"/>
             </xs:complexType>
           </xs:element>
           <xs:element name="DigestValue" type="xs:hexBinary"/>
           </xs:all>
           <xs:attribute name="URI" type="xs:string"/>
         </xs:complexType>
        </xs:element>
于 2014-04-04T12:51:20.760 に答える