The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Describing complex ds:Signature
#     {http://www.w3.org/2000/09/xmldsig#}Signature
#
# Produced by XML::Compile::Translate::Template version undef
#          on Fri Oct 11 15:53:31 2013
#
# BE WARNED: in most cases, the example below cannot be used without
# interpretation.  The comments will guide you.
#
# xmlns:ds        http://www.w3.org/2000/09/xmldsig#
# xmlns:wsse      http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd

# is a ds:SignatureType
{ # sequence of ds_SignedInfo, ds_SignatureValue, ds_KeyInfo,
  #   ds_Object

  # is a ds:SignedInfoType
  ds_SignedInfo =>
  { # sequence of ds_CanonicalizationMethod, ds_SignatureMethod,
    #   ds_Reference

    # is a ds:CanonicalizationMethodType
    ds_CanonicalizationMethod =>
    { # sequence of ANY

      # any element in any namespace
      # occurs any number of times
      ANY => [ "Anything", ],

      # is a xsd:anyURI
      # attribute Algorithm is required
      Algorithm => "http://example.com", },

    # is a ds:SignatureMethodType
    ds_SignatureMethod =>
    { # sequence of ds_HMACOutputLength, ANY

      # is a xsd:integer
      # is optional
      ds_HMACOutputLength => 42,

      # any element not in ds:
      # occurs any number of times
      ANY => [ "Anything", ],

      # is a xsd:anyURI
      # attribute Algorithm is required
      Algorithm => "http://example.com", },

    # is a ds:ReferenceType
    # occurs 1 <= # <= unbounded times
    ds_Reference =>
    [ { # sequence of ds_Transforms, ds_DigestMethod, ds_DigestValue

        # is a ds:TransformsType
        # is optional
        ds_Transforms =>
        { # sequence of ds_Transform

          # is a ds:TransformType
          # occurs 1 <= # <= unbounded times
          ds_Transform =>
          [ { # choice of ANY, ds_XPath
              # occurs any number of times
              cho_any => 
              [ {
                  # any element not in ds:
                  ANY => "Anything",

                  # is a xsd:string
                  ds_XPath => "example", },
              ],

              # is a xsd:anyURI
              # attribute Algorithm is required
              Algorithm => "http://example.com", }, ], },

        # is a ds:DigestMethodType
        ds_DigestMethod =>
        { # sequence of ANY

          # any element not in ds:
          # occurs any number of times
          ANY => [ "Anything", ],

          # is a xsd:anyURI
          # attribute Algorithm is required
          Algorithm => "http://example.com", },

        # is a xsd:base64Binary
        ds_DigestValue => "decoded bytes",

        # is a xsd:ID
        Id => "id_0",

        # is a xsd:anyURI
        URI => "http://example.com",

        # is a xsd:anyURI
        Type => "http://example.com", }, ],

    # is a xsd:ID
    Id => "id_0", },

  # is a ds:SignatureValueType
  # ds_SignatureValue is simple value with attributes
  ds_SignatureValue =>
  { # is a xsd:ID
    Id => "id_0",

    # is a xsd:base64Binary
    # string content of the container
    _ => "decoded bytes", },

  # is a ds:KeyInfoType
  # is optional
  ds_KeyInfo =>
  { # choice of ds_KeyName, ds_KeyValue, ds_RetrievalMethod,
    #   ds_X509Data, ds_PGPData, ds_SPKIData, ds_MgmtData, ANY
    # occurs 1 <= # <= unbounded times
    cho_ds_KeyName => 
    [ {
        # is a xsd:string
        ds_KeyName => "example",

        # is a ds:KeyValueType
        ds_KeyValue =>
        { # choice of ds_DSAKeyValue, ds_RSAKeyValue, ANY

          # is a ds:DSAKeyValueType
          ds_DSAKeyValue =>
          { # sequence of sequence, ds_G, ds_Y, ds_J, sequence

            # sequence of ds_P, ds_Q
            # is optional

            # is a xsd:base64Binary
            ds_P => "decoded bytes",

            # is a xsd:base64Binary
            ds_Q => "decoded bytes",

            # is a xsd:base64Binary
            # is optional
            ds_G => "decoded bytes",

            # is a xsd:base64Binary
            ds_Y => "decoded bytes",

            # is a xsd:base64Binary
            # is optional
            ds_J => "decoded bytes",

            # sequence of ds_Seed, ds_PgenCounter
            # is optional

            # is a xsd:base64Binary
            ds_Seed => "decoded bytes",

            # is a xsd:base64Binary
            ds_PgenCounter => "decoded bytes", },

          # is a ds:RSAKeyValueType
          ds_RSAKeyValue =>
          { # sequence of ds_Modulus, ds_Exponent

            # is a xsd:base64Binary
            ds_Modulus => "decoded bytes",

            # is a xsd:base64Binary
            ds_Exponent => "decoded bytes", },

          # any element not in ds:
          ANY => "Anything", },

        # is a ds:RetrievalMethodType
        ds_RetrievalMethod =>
        { # sequence of ds_Transforms

          # is a ds:TransformsType
          # complex structure shown above
          # is optional
          ds_Transforms => [{},],

          # is a xsd:anyURI
          URI => "http://example.com",

          # is a xsd:anyURI
          Type => "http://example.com", },

        # is a ds:X509DataType
        ds_X509Data =>
        { # sequence of choice
          # occurs 1 <= # <= unbounded times
          seq_ds_X509IssuerSerial => 
          [ {
              # choice of ds_X509IssuerSerial, ds_X509SKI,
              #   ds_X509SubjectName, ds_X509Certificate, ds_X509CRL, ANY

              # is a ds:X509IssuerSerialType
              ds_X509IssuerSerial =>
              { # sequence of ds_X509IssuerName, ds_X509SerialNumber

                # is a xsd:string
                ds_X509IssuerName => "example",

                # is a xsd:integer
                ds_X509SerialNumber => 42, },

              # is a xsd:base64Binary
              ds_X509SKI => "decoded bytes",

              # is a xsd:string
              ds_X509SubjectName => "example",

              # is a xsd:base64Binary
              ds_X509Certificate => "decoded bytes",

              # is a xsd:base64Binary
              ds_X509CRL => "decoded bytes",

              # any element not in ds:
              ANY => "Anything", },
          ], },

        # is a ds:PGPDataType
        ds_PGPData =>
        { # choice of sequence, sequence

          # sequence of ds_PGPKeyID, ds_PGPKeyPacket, ANY

          # is a xsd:base64Binary
          ds_PGPKeyID => "decoded bytes",

          # is a xsd:base64Binary
          # is optional
          ds_PGPKeyPacket => "decoded bytes",

          # any element not in ds:
          # occurs any number of times
          ANY => [ "Anything", ],

          # sequence of ds_PGPKeyPacket, ANY

          # is a xsd:base64Binary
          ds_PGPKeyPacket => "decoded bytes",

          # any element not in ds:
          # occurs any number of times
          ANY => [ "Anything", ], },

        # is a ds:SPKIDataType
        ds_SPKIData =>
        { # sequence of ds_SPKISexp, ANY
          # occurs 1 <= # <= unbounded times
          seq_ds_SPKISexp => 
          [ {
              # is a xsd:base64Binary
              ds_SPKISexp => "decoded bytes",

              # any element not in ds:
              # is optional
              ANY => "Anything", },
          ], },

        # is a xsd:string
        ds_MgmtData => "example",

        # any element not in ds:
        ANY => "Anything", },
    ],

    # is a xsd:ID
    Id => "id_0", },

  # is a ds:ObjectType
  # occurs any number of times
  ds_Object =>
  [ { # sequence of ANY
      # occurs any number of times
      seq_any => 
      [ {
          # any element in any namespace
          ANY => "Anything", },
      ],

      # is a xsd:ID
      Id => "id_0",

      # is a xsd:string
      MimeType => "example",

      # is a xsd:anyURI
      Encoding => "http://example.com", }, ],

  # is a xsd:ID
  Id => "id_0", }