2017-10-10 7 views
0

L'un de nos XML va avoir un bloc de signature dans le futur.Comment ajouter une définition d'élément de signature à XSD

Je ne sais pas où mettre la définition pour cela dans le fichier XSD pour cela.

J'ai essayé de mettre ce qui suit à la fin (avant la fermeture du <xs:schem>):

<element name="Signature" type="ds:SignatureType"/> 
<complexType name="SignatureType"> 
    <sequence> 
     <element ref="ds:SignedInfo"/> 
     <element ref="ds:SignatureValue"/> 
    </sequence> 
    <attribute name="Id" type="ID" use="optional"/> 
</complexType> 

<element name="SignatureValue" type="ds:SignatureValueType"/> 
<complexType name="SignatureValueType"> 
    <simpleContent> 
     <extension base="base64Binary"> 
      <attribute name="Id" type="ID" use="optional"/> 
     </extension> 
    </simpleContent> 
</complexType> 

<element name="SignedInfo" type="ds:SignedInfoType"/> 
<complexType name="SignedInfoType"> 
    <sequence> 
     <element ref="ds:CanonicalizationMethod"/> 
     <element ref="ds:SignatureMethod"/> 
     <element ref="ds:Reference" maxOccurs="unbounded"/> 
    </sequence> 
    <attribute name="Id" type="ID" use="optional"/> 
</complexType> 

<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/> 
<complexType name="CanonicalizationMethodType" mixed="true"> 
    <sequence> 
     <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/> 
     <!-- (0,unbounded) elements from (1,1) namespace --> 
    </sequence> 
    <attribute name="Algorithm" type="anyURI" use="required"/> 
</complexType> 

<element name="SignatureMethod" type="ds:SignatureMethodType"/> 
<complexType name="SignatureMethodType" mixed="true"> 
    <sequence> 
     <element name="HMACOutputLength" minOccurs="0" 
      type="ds:HMACOutputLengthType"/> 
      <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/> 
     <!-- (0,unbounded) elements from (1,1) external namespace --> 
     </sequence> 
    <attribute name="Algorithm" type="anyURI" use="required"/> 
</complexType> 

<element name="Reference" type="ds:ReferenceType"/> 
<complexType name="ReferenceType"> 
    <sequence> 
     <element ref="ds:Transforms" minOccurs="0"/> 
     <element ref="ds:DigestMethod"/> 
     <element ref="ds:DigestValue"/> 
    </sequence> 
    <attribute name="Id" type="ID" use="optional"/> 
    <attribute name="URI" type="anyURI" use="optional"/> 
    <attribute name="Type" type="anyURI" use="optional"/> 
</complexType> 

<element name="Transforms" type="ds:TransformsType"/> 
<complexType name="TransformsType"> 
    <sequence> 
     <element ref="ds:Transform" maxOccurs="unbounded"/> 
    </sequence> 
</complexType> 

<element name="Transform" type="ds:TransformType"/> 
<complexType name="TransformType" mixed="true"> 
    <choice minOccurs="0" maxOccurs="unbounded"> 
     <any namespace="##other" processContents="lax"/> 
     <!-- (1,1) elements from (0,unbounded) namespaces --> 
     <element name="XPath" type="string"/> 
    </choice> 
    <attribute name="Algorithm" type="anyURI" use="required"/> 
</complexType> 

<element name="DigestMethod" type="ds:DigestMethodType"/> 
<complexType name="DigestMethodType" mixed="true"> 
    <sequence> 
     <any namespace="##other" processContents="lax" 
      minOccurs="0" maxOccurs="unbounded"/> 
    </sequence>  
    <attribute name="Algorithm" type="anyURI" use="required"/> 
</complexType> 

<element name="DigestValue" type="ds:DigestValueType"/> 
    <simpleType name="DigestValueType"> 
    <restriction base="base64Binary"/> 
</simpleType> 

dans la balise de schéma que je donne les résultats suivants:

<xs:schema xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 

le vérificateur W3C me dit il y a quelques problèmes avec l'espace de noms. Mais je suis perdu ici en raison de mon manque de connaissances sur XSD

La partie de signature dans le fichier XML semble que les éléments suivants (à droite avant de fermer le nœud racine)

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
<SignedInfo> 
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
    <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" /> 
    </Transforms> 
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
    <DigestValue>[the digest value]</DigestValue> 
    </Reference> 
</SignedInfo> 
<SignatureValue>[the generated signature]</SignatureValue> 
</Signature> 

Quels changements dois-je ajouter à mon XSD pour que le XML avec le bloc de signature valide vrai contre le XSD?

+1

Vous aurez probablement plus de succès si vous passez quelques heures à lire quelques tutoriels d'introduction sur XSD. Les déclarations d'espace de noms que vous affichez ne correspondent pas bien à l'utilisation de l'espace de noms dans le fragment de schéma que vous affichez, ce qui suggère que vous devrez également lire certains didacticiels sur les espaces de noms XML et leur fonctionnement. Bonne chance! –

+0

merci! avec une compréhension de base des espaces de noms je pourrais créer un XSD valide (voir ma réponse ci-dessous) – Woncker

Répondre