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.

     Copyright (c) 2007 - 2009 Andy Bierman and the persons
     identified as authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the BSD 3-Clause License
     http://opensource.org/licenses/BSD-3-Clause";

    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;
    }

}
