XSD schema

View: New views
4 Messages — Rating Filter:   Alert me  

XSD schema

by Dobes Vandermeer :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I've been working on an XSD schema for the configuration, so that my
xml editor can do auto-completion and friendly structured editing/
validation.  I've had to modify my copy of xml_parser.php to ignore
attributes since it rejects the declaration saying "Simplified XML
can not have attributes in tags".

Hopefully this idea of te XSD schema is something people will like
and you'll maintain it, or at least make it allowable to use the
schema in your xml.

Example usage:

<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://
www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
www.w3.org/2001/XMLSchema ../../MetaL/metastorage/component.xsd ">


The XSD:


<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" xmlns="http://www.w3.org/2001/
XMLSchema">

    <element name="component" type="componentDef"></element>
   

    <complexType name="componentDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="description" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="component" type="componentRef"
             maxOccurs="unbounded" minOccurs="0">
          </element>
          <element name="class" type="classDef" maxOccurs="unbounded"
             minOccurs="0">
          </element>
          <element name="factory" type="factoryDef" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   The object factory class is a special purpose class
                   that is meant to create new objects from scratch or
                   retrieve them from the persistence container.

                   For each component, there should be only one
factory
                   class. Like the data classes, the factory class may
                   also have customizable functions defined in a
similar
                   way. The only function definition attributes that
are
                   different are the function types and their
                   parameters.

                   The currently supported factory class function
types
                   are: createobject, custom, finishtransaction,
                   getallobjects, getobject and starttransaction.
                </documentation>
             </annotation>
          </element>
          <element name="schema" type="schemaDef" maxOccurs="1"
             minOccurs="0">
          </element>
       </sequence>
    </complexType>



    <complexType name="classDef">
       <sequence>
          <element name="id" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="variable" type="variableDef"
             maxOccurs="unbounded" minOccurs="0">
          </element>
          <element name="collection" type="classCollectionDef"
             maxOccurs="unbounded" minOccurs="0">
                <annotation>
                   <documentation>
                      (Optional) The relation between the objects of a
                      class with a group of objects of the same or
other
                      class is specified as a collection. A class may
                      specify one or more collections using separate
                      sections for each.
                   </documentation>
                </annotation>
          </element>
          <element name="validation" type="classValidationDef"
             maxOccurs="unbounded" minOccurs="0">
                <annotation>
                   <documentation>
                      (Optional) Each class may have defined a set of
                      validation rules to determine the consistency of
                      the data hold in its objects.
                   </documentation>
                </annotation>
          </element>
          <element name="function" type="factoryFunctionDef"
maxOccurs="unbounded" minOccurs="0"></element>
       </sequence>
    </complexType>
   
    <complexType name="componentRef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
minOccurs="1"></element>
          <element name="file" type="string" maxOccurs="1"
minOccurs="1"></element>
       </sequence>
    </complexType>


    <complexType name="variableDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
            <element name="was" type="string" maxOccurs="1"
minOccurs="0"></element>
            <element name="type" maxOccurs="1" minOccurs="0">
               <annotation>
                  <documentation>
                     (Required alternative) Each variable must be of a
                     type. The type must be either a basic data type
or
                     a reference to a object of the same or another
                     class. The type tag is used to specify the basic
                     data type of a variable. Supported basic data
types
                     are: text, integer, boolean, float, decimal,
date,
                     time and timestamp.
                  </documentation>
               </annotation>
               <simpleType>
                  <restriction base="string">
                     <enumeration value="text"></enumeration>
                     <enumeration value="integer"></enumeration>
                     <enumeration value="boolean"></enumeration>
                     <enumeration value="float"></enumeration>
                     <enumeration value="decimal"></enumeration>
                     <enumeration value="date"></enumeration>
                     <enumeration value="time"></enumeration>
                     <enumeration value="timestamp"></enumeration>
                  </restriction>
               </simpleType>
            </element>
            <element name="initialvalue" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   A variable of a basic data type may have an initial
                   value. That value is automatically assigned to the
                   variable when the object is created.

                   Also, when a new basic data type variable is added
to
                   a class, the initial value is automatically stored
in
                   the variable for all the previously persisted
                   objects. This is not the case for large data
                   variables.

                   The initialvalue tag is used to specify the initial
                   value of a variable.
                </documentation>
             </annotation>
          </element>
          <element name="length" type="int" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="multiline" type="boolean" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="binary" type="boolean" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="autocreate" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   A variable may be set to be initialized
automatically
                   with a special value using the autocreate attribute
                   tag. This attribute determines that the variable
will
                   be created with an automatic initial value and will
                   never be changed in subsequent updates of the
object
                   done using a class persist type function.

                   Alternatively, a variable may be set to be
                   initialized and updated automatically with a
special
                   value using the autoupdate attribute tag. This
                   attribute determines that the variable will be set
                   with an automatic value every time the object is
                   updated using a class persist type function,
                   including when the object is created and stored for
                   the first time.

                   Either autocreate and autoupdate variables may not
be
                   changed directly by the applications access the
                   objects of their classes.

                   Currently, only the variables of the types date,
time
                   and timestamp may be defined as autocreate or
                   autoupdate. The values of either of these
attributes
                   may be either localdate and utcdate for date
                   variables, and localtime and utctime for time or
                   timestamp variables. localdate and localtime
                   represent the current date and time in the local
time
                   zone and utcdate and utctime represent the current
                   date and time in the UTC (Universal Time) time
zone.
                </documentation>
             </annotation>
          </element>
          <element name="autoupdate" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="class" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   (Required alternative) Variables may contain
                   references to objects of the same or other classes.
                   The class tag is used to specify the class of
object
                   reference variable. This attribute must contain the
                   name of a class specified in the same component
                   definition or in from another component specified
by
                   the component attribute.
                </documentation>
             </annotation>
          </element>
          <element name="component" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   A variable may contain a reference to an object of
a
                   class of another component. The component tag is
used
                   to specify the external component that defines the
                   reference class. The specified external component
                   must be previously declared in the current
component
                   definition.
                </documentation>
             </annotation>
          </element>
       </sequence>
    </complexType>
   
    <complexType name="classCollectionDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
             <annotation>
                <documentation>
                   (Required) Each collection must have a unique name
                   that may not be the same as of any variables of the
                   class.
                </documentation>
             </annotation>
          </element>
          <element name="was" type="string" maxOccurs="1"
             minOccurs="0">
                <annotation>
                   <documentation>
                      (Required when renaming a collection) The was
tag
                      must be used to specify the previous name of a
                      collection when it is renamed.
                   </documentation>
                </annotation>
          </element>
          <element name="class" type="string" maxOccurs="1"
             minOccurs="1">
                <annotation>
                   <documentation>
                      (Required) A collection references objects a of
a
                      specified class.
                   </documentation>
                </annotation>
          </element>
          <element name="component" type="string" maxOccurs="1"
             minOccurs="0">
                <annotation>
                   <documentation>
                      A collection may contain objects of a class of
                      another component. The component tag is used to
                      specify the external component that defines the
                      collection class. The specified external
component
                      must be previously declared in the current
                      component definition.
                   </documentation>
                </annotation>
          </element>
          <element name="reference" type="string" maxOccurs="1"
minOccurs="1">
             <annotation>
                <documentation>
                   (Required) A collection reference specifies a
                   variable or another collection of the referenced
                   class.
                </documentation>
             </annotation></element>
       </sequence>
    </complexType>
   
    <complexType name="classValidationDef">
       <sequence>
          <element name="type" type="string" maxOccurs="1"
             minOccurs="1">
             <annotation>
                <documentation>
                   (Required) Each validation must be of a specific
                   type. Currently the types of validation that are
                   supported are: notempty and unique.
                </documentation>
             </annotation>
          </element>
          <element name="errorcode" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   (Optional) A class may verify several types of
                   validation rules at once. If one validation rule
does
                   not verify, applications may need to know which
rule
                   has failed. An errorcode maybe associated with each
                   validation rule to let applications act upon the
rule
                   that failed.
                </documentation>
             </annotation>
          </element>
          <element name="parameters"
             type="classValidationParametersDef" maxOccurs="1"
             minOccurs="0">
                <annotation>
                   <documentation>
                      (Required depending on rule type) Each type of
                      validation may need additional parameters that
                      define the details of the scope of the
validation.

                      notempty rule

                      The notempty validation verifies that one or
more
                      text specified class variables are set to a non
                      empty string.

                      The validation specific parameters consist of
the
                      list of variables specified using the variable
tag
                      for each variable to be checked.

                      unique rule

                      The unique validation verifies that there is no
                      other stored object with the same combination of
                      values of a group of class variables of a given
                      object.

                      The validation specific parameters consist of
the
                      list of variables specified using the variable
tag
                      with the combination of values to be verified as
                      unique.
                   </documentation>
                </annotation>
          </element>
       </sequence>
    </complexType>
   
    <complexType name="classFunctionDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="type" maxOccurs="1" minOccurs="1">
             <annotation>
                <documentation>
                   (Required) Each data class function is of a
specified
                   type defined according to the function purpose.
                   Currently the types of functions that are supported
                   are: addtocollection, delete, custom,
getcollection,
                   getlargedata, getreference, persist,
                   removefromcollection, setlargedata, setreference
and
                   validate.
                </documentation>
             </annotation>
             <simpleType>
                <restriction base="string">
                   <enumeration value="addtocollection"></enumeration>
                   <enumeration value="delete"></enumeration>
                   <enumeration value="custom"></enumeration>
                   <enumeration value="getcollection"></enumeration>
                   <enumeration value="getlargedata"></enumeration>
                   <enumeration value="getreference"></enumeration>
                   <enumeration value="persist"></enumeration>
                   <enumeration value="removefromcollection"></
enumeration>
                   <enumeration value="setlargedata"></enumeration>
                   <enumeration value="setreference"></enumeration>
                   <enumeration value="validate"></enumeration>
                </restriction>
             </simpleType>
          </element>
          <element name="argument" type="classFunctionArgumentDef"
             maxOccurs="unbounded" minOccurs="0">
             <annotation>
                <documentation>
                   (Optional) Some types of function may take
additional
                   arguments that can be used to configure details of
                   the function behavior using values that are only be
                   defined at run time by the application that calls
the
                   function.

                   This is the case for instance of functions that
                   search for objects of a given class may take
                   arguments that define values that can be used in a
                   filter condition parameters.

                   A class function may have multiple custom
arguments.
                   If there are arguments that were defined but
actually
                   are not used in the function, probably because they
                   were forgotten or for some other type of mistake,
                   Metastorage fails specifying which argument was
left
                   unused.

                   Each argument is defined separately in sections
that
                   start with the tag argument. The argument details
are
                   defined inside the respective section.
                </documentation>
             </annotation>
          </element>
          <element name="parameters"
type="classFunctionParametersDef"></element>
       </sequence>
    </complexType>
   
    <complexType name="autofunction"></complexType>

    <complexType name="classValidationParametersDef"></complexType>



    <complexType name="classFunctionArgumentDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="type" maxOccurs="1" minOccurs="0">
             <annotation>
                <documentation>
                   The type of the argument is also a required
parameter
                   when the argument type is scalar or an array or an
                   hash table. Currently supported scalar argument
types
                   are: integer, text, float, decimal, boolean, time,
                   date, timestamp, array and hashtable.
                </documentation>
             </annotation>
             <simpleType>
                <restriction base="string">
                   <enumeration value="integer"></enumeration>
                   <enumeration value="text"></enumeration>
                   <enumeration value="float"></enumeration>
                   <enumeration value="decimal"></enumeration>
                   <enumeration value="boolean"></enumeration>
                   <enumeration value="time"></enumeration>
                   <enumeration value="date"></enumeration>
                   <enumeration value="timestamp"></enumeration>
                   <enumeration value="array"></enumeration>
                   <enumeration value="hashtable"></enumeration>
                </restriction>
             </simpleType>
          </element>
          <element name="class" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   An argument may also be a reference to an object.
The
                   class parameter specifies the name of a class of
the
                   object argument.
                </documentation>
             </annotation>
          </element>
          <element name="oid" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   An object argument may also be passed by using its
                   object identifier value (oid). For object arguments
                   of classes with an implicit oid, the argument is an
                   integer number usually stored in the id class
                   variable. An object identifier arguments is
specified
                   using an empty oid parameter.
                </documentation>
             </annotation>
          </element>
          <element name="component" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   An argument may be an object of a class defined in
an
                   external component definition. The component
                   parameter specifies the name of the external
                   component on which the object class is defined.
                </documentation>
             </annotation>
          </element>
       </sequence>
    </complexType>

    <complexType name="classFunctionParametersDef">
       <sequence>
          <element name="collection" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="object"
type="classFunctionParametersObjectDef"
             maxOccurs="1" minOccurs="0">
          </element>
          <element name="do" type="string" maxOccurs="1"
             minOccurs="0">
             <annotation>
                <documentation>
                   Custom code for a "custom" type function.
                </documentation>
             </annotation>
          </element>
          <element name="return"
type="classFunctionParametersReturnDef"
             maxOccurs="1" minOccurs="0">
          </element>
          <element name="class" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="id" type="classFunctionParametersIdDef"
maxOccurs="1" minOccurs="0"></element>
       </sequence>
    </complexType>

    <complexType name="classFunctionParametersObjectDef">
       <sequence>
          <element name="argument" type="string" maxOccurs="1"
minOccurs="0"></element>
       </sequence>
    </complexType>

    <complexType name="classFunctionParametersReturnDef">
       <sequence>
          <element name="type" maxOccurs="1" minOccurs="0">
             <simpleType>
                <restriction base="string">
                   <enumeration value="integer"></enumeration>
                   <enumeration value="text"></enumeration>
                   <enumeration value="float"></enumeration>
                   <enumeration value="decimal"></enumeration>
                   <enumeration value="boolean"></enumeration>
                   <enumeration value="time"></enumeration>
                   <enumeration value="date"></enumeration>
                   <enumeration value="timestamp"></enumeration>
                   <enumeration value="array"></enumeration>
                   <enumeration value="hashtable"></enumeration>
                </restriction>
             </simpleType>
          </element>
          <element name="class" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="oid" type="string" maxOccurs="1"
             minOccurs="0">
          </element>
          <element name="component" type="string" maxOccurs="1"
minOccurs="0"></element>
       </sequence>
    </complexType>

    <complexType name="factoryDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="function" type="factoryFunctionDef"
maxOccurs="unbounded" minOccurs="0"></element>
       </sequence>
    </complexType>
   
    <complexType name="factoryFunctionDef">
       <sequence>
          <element name="name" type="string" maxOccurs="1"
             minOccurs="1">
          </element>
          <element name="type" maxOccurs="1" minOccurs="1">
             <annotation>
                <documentation>
                   The currently supported factory class function
types
                   are: createobject, custom, finishtransaction,
                   getallobjects, getobject and starttransaction.
                </documentation>
             </annotation>
             <simpleType>
                <restriction base="string">
                   <enumeration value="createobject"></enumeration>
                   <enumeration value="custom"></enumeration>
                   <enumeration value="finishtransaction"></
enumeration>
                   <enumeration value="getallobjects"></enumeration>
                   <enumeration value="getobject"></enumeration>
                   <enumeration value="starttransaction"></
enumeration>
                </restriction>
             </simpleType>
          </element>
          <element name="argument" type="classFunctionArgumentDef"
             maxOccurs="unbounded" minOccurs="0">
             <annotation>
                <documentation>
                   (Optional) Some types of function may take
additional
                   arguments that can be used to configure details of
                   the function behavior using values that are only be
                   defined at run time by the application that calls
the
                   function.

                   This is the case for instance of functions that
                   search for objects of a given class may take
                   arguments that define values that can be used in a
                   filter condition parameters.

                   A class function may have multiple custom
arguments.
                   If there are arguments that were defined but
actually
                   are not used in the function, probably because they
                   were forgotten or for some other type of mistake,
                   Metastorage fails specifying which argument was
left
                   unused.

                   Each argument is defined separately in sections
that
                   start with the tag argument. The argument details
are
                   defined inside the respective section.
                </documentation>
             </annotation>
          </element>
          <element name="parameters"
type="classFunctionParametersDef" maxOccurs="unbounded"
minOccurs="0"></element>
       </sequence>
    </complexType>
   

    <complexType name="schemaDef">
        <annotation>
           <documentation>
              The schema setup class is also a special purpose class
              that is meant to provide services to setup a data schema
              to store the objects in the persistence container.

              For each component, there should be only one schema
setup
              class. Like the data classes and the factory class, the
              schema setup class may also have customizable functions
              defined in a similar way.

              The only currently supported schema setup class function
              types is installschema.
           </documentation>
        </annotation>
        <sequence maxOccurs="1" minOccurs="1">
          <element name="function" type="schemaFunctionDef"
maxOccurs="unbounded" minOccurs="0"></element>

       </sequence>
    </complexType>

    <complexType name="schemaFunctionDef">
       <sequence>
          <element name="name" maxOccurs="1" minOccurs="1">
                <annotation>
                   <documentation>
                      A installschema type function does all that is
                      necessary to install the data schema in the
                      persistence container. The meaning of this
action
                      depends on the type of persistence container
being
                      used.

                      Currently the only type persistence container
that
                      is supported are SQL based relational databases.
                      For this type of persistence container, this
                      function installs the database schema.

                      The generated function is of type BOOLEAN. It
                      returns true if it succeeded or false if there
was
                      an execution error. This function does not take
                      any parameters.
                   </documentation>
                </annotation>
                <simpleType>
                <restriction base="string"></restriction>
             </simpleType>
          </element>
          <element name="type" maxOccurs="1" minOccurs="1">
             <simpleType>
                <restriction base="string">
                   <enumeration value="installschema"></enumeration>
                </restriction>
             </simpleType>
          </element>
       </sequence>
    </complexType>

    <complexType name="classFunctionParametersIdDef">
       <sequence>
          <element name="argument" type="string" maxOccurs="1"
minOccurs="1"></element>
       </sequence>
    </complexType>
</schema>


Re: XSD schema

by mlemos :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

on 12/02/2006 10:43 PM dobes_vandermeer said the following:
> I've been working on an XSD schema for the configuration, so that my
> xml editor can do auto-completion and friendly structured editing/
> validation.  I've had to modify my copy of xml_parser.php to ignore
> attributes since it rejects the declaration saying "Simplified XML
> can not have attributes in tags".
>
> Hopefully this idea of te XSD schema is something people will like
> and you'll maintain it, or at least make it allowable to use the
> schema in your xml.

Sorry for the delay. I have been at PHP Conference Brasil 2006 and I am
still catching up on pending e-mail.

I need to make time to look at this closer, but you do not need to hack
the XML parser class, it the simplified XML option is controlled by the
MetaL compiler.

I was not aware that when you specify the schema with a XML file for
MetaL engine, the schema als gets parsed. I need to look closer at this
to avoid thes problems.

Anyway, I use Kate to edit my project files. I am not sure if it
supports XML schema based validation or auto-completion . Which editor
do you use that makes use of the XML schema?

As for the schema file, it may be useful to distribute with Metastorage,
if you would not mind. Of course you would be credited for your
contribution.

--

Regards,
Manuel Lemos

Metastorage - Data object relational mapping layer generator
http://www.metastorage.net/

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/

Re: XSD schema

by Dobes Vandermeer :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Of course you're welcome to distribute the file.

The point I was making about the XML parser is that it rejects the
schema declaration, which must be included in the xml file in order
for validation to function.  For example, the root tag for the
component is:

<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://
www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
www.w3.org/2001/XMLSchema ../../MetaL/metastorage/component.xsd ">

The xsd itself is not parsed, but these attributes on the root tag
*are* parsed (and rejected) by the metaL parser.  It would be great if
the simplified XML parser would allow these tags on the root tag of
the document.

I'm using the eclipse wed development toolkit, which has a validating
XML editor that also allows you to view the XML in a structured view.
It's quite nice, and being able to use auto-complete and see any
mistakes can make editing and understanding the file a bit easier.

I don't think that the xsd there is complete, however.  But it is a start.

On 12/12/06, Manuel Lemos <mlemos@...> wrote:

> Hello,
>
> on 12/02/2006 10:43 PM dobes_vandermeer said the following:
> > I've been working on an XSD schema for the configuration, so that my
> > xml editor can do auto-completion and friendly structured editing/
> > validation.  I've had to modify my copy of xml_parser.php to ignore
> > attributes since it rejects the declaration saying "Simplified XML
> > can not have attributes in tags".
> >
> > Hopefully this idea of te XSD schema is something people will like
> > and you'll maintain it, or at least make it allowable to use the
> > schema in your xml.
>
> Sorry for the delay. I have been at PHP Conference Brasil 2006 and I am
> still catching up on pending e-mail.
>
> I need to make time to look at this closer, but you do not need to hack
> the XML parser class, it the simplified XML option is controlled by the
> MetaL compiler.
>
> I was not aware that when you specify the schema with a XML file for
> MetaL engine, the schema als gets parsed. I need to look closer at this
> to avoid thes problems.
>
> Anyway, I use Kate to edit my project files. I am not sure if it
> supports XML schema based validation or auto-completion . Which editor
> do you use that makes use of the XML schema?
>
> As for the schema file, it may be useful to distribute with Metastorage,
> if you would not mind. Of course you would be credited for your
> contribution.
>
> --
>
> Regards,
> Manuel Lemos
>
> Metastorage - Data object relational mapping layer generator
> http://www.metastorage.net/
>
> PHP Classes - Free ready to use OOP components written in PHP
> http://www.phpclasses.org/
>
>
>
> Yahoo! Groups Links
>
>
>
>

Re: XSD schema

by mlemos :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

on 12/12/2006 05:50 PM Dobes Vandermeer said the following:

> Of course you're welcome to distribute the file.
>
> The point I was making about the XML parser is that it rejects the
> schema declaration, which must be included in the xml file in order
> for validation to function.  For example, the root tag for the
> component is:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <component xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://
> www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
> www.w3.org/2001/XMLSchema ../../MetaL/metastorage/component.xsd ">
>
> The xsd itself is not parsed, but these attributes on the root tag
> *are* parsed (and rejected) by the metaL parser.  It would be great if
> the simplified XML parser would allow these tags on the root tag of
> the document.

Oh, I see. I will look into that soon so it stops complaining.


> I'm using the eclipse wed development toolkit, which has a validating
> XML editor that also allows you to view the XML in a structured view.
> It's quite nice, and being able to use auto-complete and see any
> mistakes can make editing and understanding the file a bit easier.

Ok, I do not use Eclipse because it is too heavy, but I will take a look
at that soon to see how it works.


> I don't think that the xsd there is complete, however.  But it is a start.

Sure. I will include it Metastorage distribution and credit you in the
next release . If necessary I will try to improve it to make it more
usable. Thanks for your contribution.

--

Regards,
Manuel Lemos

Metastorage - Data object relational mapping layer generator
http://www.metastorage.net/

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/