2012-05-28 6 views
-1

У меня есть файл XML как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-п Ile я получаю следующее исключение

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. 

ответ

2

На c2.xsd, строка 22

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

xs:element не может выступать в качестве прямого потомка xs:complexType. Он должен быть внутри xs:all, xs:choice или xs:sequence.

+0

Проверьте мой c2.xsd сейчас. Я пробовал , но все же он показывает ошибку. Я вставил новую ошибку в свой вопрос – suraj

1

Я опробовал свой файл и удалось получить его для проверки на Notepad ++ делает несколько вещей:

  1. Изменена XSD использовать ссылку на импортируемый подписи XSD без каких-либо C: \ ссылки. Для этого я просто скопировал файл импортируется в том же месте, что и XSD я делал импорт из
  2. Изменена c2.xsd где вы указываете дц к другому атрибуту, а именно DSIG
  3. Загрузили w3c версия программы подпись xsd от w3 Signature xsd и использовать это в импорте (шаг 1).
  4. Изменен ваш выходной файл xml, чтобы включить строку xmlns = "http://www.w3.org/2000/09/xmldsig#" при указании подписи.

Обратите внимание на 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> 
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> 

должен быть определен после того, как группа, все, выбор или элемент последовательности, поэтому измените порядок в <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> 
Смежные вопросы