module yuma-xsd {

    namespace "http://www.w3.org/2001/XMLSchema";
    prefix "xsd";

    organization
        "Netconf Central";

    contact
        "Andy Bierman <andy@netconfcentral.org>";

    description
        "XSD derived types for usage in YANG.";

    revision 2009-11-21 {
        description 
          "Rename xsd to yuma-xsd.";
    }

    revision 2007-12-06 {
        description 
          "Initial revision.  There is more work to do
           filling in patterns for some of the string types";
    }


// The string data type is a YANG builtin type and not
// available in this module.

    typedef normalizedString {
      description
        "XSD normalized string";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028' +
        '/datatypes.html#normalizedString';
      type string;
    }

    typedef token {
      description
        "XSD token string";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#token';
      type string;
    }

    typedef base64Binary {
      description
        "XSD base64 binary encoded string";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#base64Binary';
      type string;
    }

    typedef hexBinary {
      description
        "XSD hex binary encoded string";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#hexBinary';
      type binary;
    }

    typedef integer {
      description 
        "XSD unbounded integer type. 
         This cannot be given a range like a number.
         This pattern does not supoort string representations
         of numbers, such as one two three";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#integer';
      type string {
        pattern '[\-+]?[0-9]+';
      }
    }

    typedef positiveInteger {
      description 
        "XSD unbounded positive integer.
         This cannot be given a range like a number.
         This pattern does not supoort string representations
         of numbers, such as one two three";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#positiveInteger';
      type string {
         pattern '[\+]?[1-9]+[0-9]*';
      }
    }

    typedef negativeInteger {
      description 
        "XSD unbounded negative integer.
         This cannot be given a range like a number.
         This pattern does not supoort string representations
         of numbers, such as one two three";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#negativeInteger';
      type string {
         pattern '[\-]?[1-9]+[0-9]*';
      }
    }

    typedef nonNegativeInteger {
      description 
        "XSD unbounded non-negative integer.
         This cannot be given a range like a number.
         This pattern does not supoort string representations
         of numbers, such as one two three";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#nonNegativeInteger';
      type string {
         pattern '[\+]?[0-9]*';
      }
    }

    typedef nonPositiveInteger {
      description 
        "XSD unbounded non-positive integer.
         This cannot be given a range like a number.
         This pattern does not supoort string representations
         of numbers, such as one two three";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#nonPositiveInteger';
      type string {
        pattern '\-[1-9]+[0-9]*';
      }
    }

    typedef long {
      description
        "XSD 64 bit signed integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#long';
      type int64;
    }

    typedef unsignedLong {
      description
        "XSD 64 bit unsigned integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#unsignedLong';
      type uint64;
    }

    typedef int {
      description
        "XSD 32 bit signed integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#int';
      type int32;
    }

    typedef unsignedInt {
      description
        "XSD 32 bit unsigned integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#unsignedInt';
      type uint32;
    }

    typedef short {
      description
        "XSD 16 bit signed integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#short';
      type int16;
    }

    typedef unsignedShort {
      description
        "XSD 16 bit unsigned integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#unsignedShort';
      type uint16;
    }

    typedef byte {
      description
        "XSD 8 bit signed integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#byte';
      type int8;
    }

    typedef unsignedByte {
      description
        "XSD 8 bit unsigned integer.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#unsignedByte';
      type uint8;
    }

    typedef decimal {
      description
        "XSD decimal data type.
         [To do: not sure if this is a bounded real number
          or an unbounded real number.].";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#decimal';
      type string;
    }


//  The boolean type is a builtin type in YANG so it
//   not available in this XSD module.

    typedef duration {
      description
        "XSD duration string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#duration';
      type string;
    }

    typedef dateTime {
      description
        "XSD date and time string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#dateTime';
      type string {
       // adapted date-and-time pattern
       pattern '-?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
             + '(Z|(\+|-)\d{2}:\d{2})';
      }
    }

    typedef date {
      description
        "XSD date string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#date';
      type string;
    }

    typedef time {
      description
        "XSD time string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#time';
      type string;
    }

    typedef gYear {
      description
        "XSD year string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#gYear';
      type string;
    }

    typedef gYearMonth {
      description
        "XSD year and month string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#gYearMonth';
      type string;
    }

    typedef gMonth {
      description
        "XSD month string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#gMonth';
      type string;
    }

    typedef gMonthDay {
      description
        "XSD month and day string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#gMonthDay';
      type string;
    }

    typedef gDay {
      description
        "XSD day string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#gDay';
      type string;
    }

    typedef Name {
      description
        "XSD name string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#Name';
      type string;
    }

    typedef QName {
      description
        "XSD namespace-qualified name string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#QName';
      type string;
    }

    typedef NCName {
      description
        "XSD not-namespace-qualified name string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#NCName';
      type string {
        pattern '[\i-[:]][\c-[:]]*';
      }
    }

    typedef anyURI {
      description
        "XSD universal resource identifier string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#anyURI';
      type string;
    }

    typedef language {
      description
        "XSD language identifier string type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#language';
      type string;
    }

    typedef ID {
      description
        "XSD ID attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#ID';
      type string;
    }

    typedef IDREF {
      description
        "XSD IDREF attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#IDREF';
      type string;
    }

    typedef IDREFS {
      description
        "XSD IDREFS attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#IDREFS';
      type string;
    }

    typedef ENTITY {
      description
        "XSD ENTITY attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#ENTITY';
      type string;
    }

    typedef ENTITIES {
      description
        "XSD ENTITIES attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#ENTITIES';
      type string;
    }

    typedef NOTATION {
      description
        "XSD NOTATION attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#NOTATION';
      type string;
    }

    typedef NMTOKEN {
      description
        "XSD NMTOKEN attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#NMTOKEN';
      type string;
    }

    typedef NMTOKENS {
      description
        "XSD NMTOKENS attribute type.";
      reference
        'http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/' +
        'datatypes.html#NMTOKENS';
      type string;
    }

}
