/*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
#ifndef AXIS2_XML_SCHEMA_CONSTANTS_H
#define AXIS2_XML_SCHEMA_CONSTANTS_H
 
#ifdef __cplusplus
extern "C"
{
#endif

/**
 * @defgroup axis2_xml_schema xml_scheam_constants
 * @ingroup axis2_xml_schema
 * @{
 */

#define AXIS2_XML_SCHEMA_XMLNS_URI "http://www.w3.org/XML/1998/namespace"

#define AXIS2_XML_SCHEMA_XMLNS_PREFIX "xml"

/** scheam namespaces */

#define AXIS2_URI_2001_SCHEMA_XSD "http://www.w3.org/2001/XMLSchema"

#define AXIS2__URI_2001_SCHEMA_XSI "http://www.w3.org/2001/XMLSchema-instance"

#define AXIS2_SEPARATOR "|"

/*** ======================================================================== ***/
/***  define qname strings such that axis2_qname_from_string ,create correct qname ******/

#define AXIS2_XSD_STRING   "string"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_BOOLEAN  "boolean" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DOUBLE   "double"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_FLOAT    "float"   AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_INT      "int"     AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_INTEGER  "integer" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_LONG     "long"    AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_SHORT    "short"   AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_BYTE     "byte"    AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DECIMAL  "decimal" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_BASE64   "base64Binary" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_HEXBIN   "hexBinary" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ANYSIMPLETYPE "anySimpleType" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ANYTYPE  "anyType" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ANY      "any"     AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_QNAME    "QName"   AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DATETIME "dateTime" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DATE     "date"    AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_TIME     "time"    AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

/*** ----------------------------------------------------------------------***/

#define AXIS2_XSD_NORMALIZEDSTRING "normalizedString" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_TOKEN "token" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

/*** -----------------------------------------------------------------------***/

#define AXIS2_XSD_UNSIGNEDLONG  "unsignedLong" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_UNSIGNEDINT   "unsignedInt"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_UNSIGNEDSHORT "unsignedShort" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_UNSIGNEDBYTE  "unsignedByte"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_POSITIVEINTEGER "positiveInteger" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NEGATIVEINTEGER "negativeInteger" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NONNEGATIVEINTEGER "nonNegativeInteger" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NONPOSITIVEINTEGER "nonPositiveInteger" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_YEARMONTH "gYearMonth"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_MONTHDAY "gMonthDay" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_YEAR "gYear" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_MONTH "gMonth" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DAY "gDay" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_DURATION "duration" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NAME "Name" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NCNAME "NCName" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NMTOKEN "NMTOKEN" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NMTOKENS "NMTOKENS" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_NOTATION "NOTATION" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ENTITY "ENTITY" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ENTITIES "ENTITIES" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_IDREF "IDREF" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_IDREFS "IDREFS" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_ANYURI "anyURI" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_LANGUAGE "language" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD__ID "ID"  AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

#define AXIS2_XSD_SCHEMA "schema" AXIS2_SEPARATOR AXIS2_URI_2001_SCHEMA_XSD

/** @} */

#ifdef __cplusplus
}
#endif
 
 
#endif /* AXIS2_XML_SCHEMA_CONSTANTS_H */