/*====================================================================*
*
* void xmlschema ();
*
* node.h
*
* print an XML schema on stdout that is compatible with function
* xmledit; the schema should be used to validate files before any
* attempt is make to parse them;
*
* Motley Tools by Charles Maier <cmaier@cmassoc.net>;
* Copyright (c) 2001-2006 by Charles Maier Associates;
* Licensed under the Internet Software Consortium License;
*
*--------------------------------------------------------------------*/
#ifndef XMLSCHEMA_SOURCE
#define XMLSCHEMA_SOURCE
#include "../nodes/node.h"
#include "../tools/format.h"
void xmlschema ()
{
unsigned margin = 0;
output (margin, "<?xml version='%s' encoding='%s'?>", XML_VERSION, XML_CHARSET);
output (margin++, "<xs:schema xmlns:xs='%s' elementFormDefault='%s'>", XML_SCHEMA, "qualified");
output (margin++, "<xs:element name='%s'>", DATA_OBJECT);
output (margin++, "<xs:complexType>");
#if 0
output (margin, "<xs:attribute name='%s' use='optional' type='xs:NCName'/>", DATA_NAME);
output (margin, "<xs:attribute name='%s' use='optional' type='xs:string'/>", DATA_TEXT);
#endif
output (margin++, "<xs:sequence>");
output (margin, "<xs:element maxOccurs='unbounded' ref='%s'/>", DATA_MEMBER);
output (margin--, "</xs:sequence>");
output (margin--, "</xs:complexType>");
output (margin--, "</xs:element>");
output (margin++, "<xs:element name='%s'>", DATA_MEMBER);
output (margin++, "<xs:complexType>");
output (margin, "<xs:attribute name='%s' use='required' type='xs:NCName'/>", DATA_NAME);
#if 0
output (margin, "<xs:attribute name='%s' use='optional' type='xs:string'/>", DATA_TEXT);
#endif
output (margin++, "<xs:sequence>");
output (margin++, "<xs:sequence>");
output (margin, "<xs:element ref='%s'/>", DATA_OFFSET);
output (margin, "<xs:element ref='%s'/>", DATA_LENGTH);
output (margin--, "</xs:sequence>");
output (margin++, "<xs:choice>");
output (margin, "<xs:element ref='%s'/>", DATA_STRUCT);
output (margin, "<xs:element ref='%s'/>", DATA_STRING);
output (margin, "<xs:element ref='%s'/>", DATA_HUGE);
output (margin, "<xs:element ref='%s'/>", DATA_LONG);
output (margin, "<xs:element ref='%s'/>", DATA_WORD);
output (margin, "<xs:element ref='%s'/>", DATA_BYTE);
output (margin--, "</xs:choice>");
output (margin--, "</xs:sequence>");
output (margin--, "</xs:complexType>");
output (margin--, "</xs:element>");
output (margin, "<xs:element name='%s' type='xs:positiveInteger'/>", DATA_LENGTH);
output (margin, "<xs:element name='%s' type='xs:hexBinary'/>", DATA_OFFSET);
output (margin++, "<xs:element name='%s'>", DATA_STRUCT);
output (margin++, "<xs:complexType>");
#if 0
output (margin, "<xs:attribute name='%s' use='optional' type='xs:NCName'/>", DATA_NAME);
output (margin, "<xs:attribute name='%s' use='optional' type='xs:string'/>", DATA_TEXT);
#endif
output (margin++, "<xs:choice maxOccurs='unbounded'>");
output (margin, "<xs:element ref='%s'/>", DATA_BYTE);
output (margin, "<xs:element ref='%s'/>", DATA_MEMORY);
output (margin--, "</xs:choice>");
output (margin--, "</xs:complexType>");
output (margin--, "</xs:element>");
output (margin, "<xs:element name='%s' type='xs:string'/>", DATA_STRING);
output (margin, "<xs:element name='%s' type='xs:hexBinary'/>", DATA_MEMORY);
output (margin, "<xs:element name='%s' type='xs:unsignedLong'/>", DATA_HUGE);
output (margin, "<xs:element name='%s' type='xs:unsignedInt'/>", DATA_LONG);
output (margin, "<xs:element name='%s' type='xs:unsignedShort'/>", DATA_WORD);
output (margin, "<xs:element name='%s' type='xs:unsignedByte'/>", DATA_BYTE);
output (margin--, "</xs:schema>");
return;
}
#endif