XML schema
<[email protected]> Tue, 25 Mar 2003 12:34:34 +0000 (GMT)
| Newsgroups | gmane.text.xml.o-xml |
|---|---|
| Message-ID | <[email protected]> |
people - attached is a mostly complete XML Schema for the core language. it should make source editing with a schema-aware editor (eg XML Spy) much easier, with predictive typing, validation and all. enjoy - /m Martin Klang http://www.o-xml.org - the object-oriented XML programming language
lang.xsd
(text/plain, 6.7 KB)
<?xml version='1.0' encoding='UTF-8' ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.o-xml.org/lang/"
targetNamespace="http://www.o-xml.org/lang/">
<!-- eval -->
<element name="eval" type="tns:Eval"/>
<complexType name="Eval" >
<attribute name="select" type="tns:Expression" use="required"/>
</complexType>
<!-- do -->
<element name="do" type="tns:Do" />
<complexType name="Do" mixed="true">
<complexContent>
<extension base="tns:Container" >
<attribute name="select" type="tns:Expression" use="optional"/>
</extension>
</complexContent>
</complexType>
<!-- for-each -->
<element name="for-each" type="tns:ForEach"/>
<complexType name="ForEach" mixed="true">
<complexContent>
<extension base="tns:Container">
<attributeGroup ref="tns:for-each-nodeset"/>
<attributeGroup ref="tns:for-each-text"/>
<attributeGroup ref="tns:for-each-numeric"/>
</extension>
</complexContent>
</complexType>
<attributeGroup name="for-each-nodeset">
<attribute name="select" type="tns:Expression" use="optional"/>
</attributeGroup>
<attributeGroup name="for-each-text">
<attribute name="in" type="tns:Expression" use="optional"/>
<attribute name="delim" type="string" default=" " use="optional"/>
</attributeGroup>
<attributeGroup name="for-each-numeric">
<attribute name="from" type="decimal" default="0" use="optional"/>
<attribute name="to" type="decimal" use="optional"/>
<attribute name="step" type="decimal" default="1" use="optional"/>
</attributeGroup>
<!-- program -->
<element name="program" type="tns:Container"/>
<!-- log -->
<element name="log" type="tns:Log"/>
<complexType name="Log" mixed="true">
<complexContent>
<extension base="tns:Container">
<attribute name="msg" type="tns:Expression" use="optional"/>
</extension>
</complexContent>
</complexType>
<!-- return -->
<element name="return" type="tns:Return"/>
<complexType name="Return" mixed="true">
<complexContent>
<extension base="tns:Container">
<attribute name="select" type="tns:Expression" use="optional"/>
</extension>
</complexContent>
</complexType>
<!-- param -->
<element name="param" type="tns:Param"/>
<complexType name="Param">
<attribute name="name" type="tns:QName" use="required"/>
<attribute name="type" type="tns:QName" use="optional" default="Node"/>
<attribute name="select" type="tns:Expression" use="optional"/>
</complexType>
<!-- parent -->
<element name="parent" type="tns:Parent"/>
<complexType name="Parent">
<attribute name="name" type="tns:QName" use="required"/>
<attribute name="type" type="tns:QName" use="optional" default="Node"/>
<attribute name="select" type="tns:Expression" use="optional"/>
</complexType>
<!-- procedure -->
<element name="procedure" type="tns:Procedure"/>
<complexType name="Procedure">
<sequence>
<element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:do" minOccurs="1" maxOccurs="1"/>
</sequence>
<attribute name="name" type="tns:QName" use="required"/>
</complexType>
<!-- function -->
<element name="function" type="tns:Function"/>
<complexType name="Function">
<sequence>
<element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:parent" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:do" minOccurs="1" maxOccurs="1"/>
</sequence>
<attribute name="name" type="tns:QName" use="required"/>
</complexType>
<!-- type -->
<element name="type" type="tns:Type"/>
<complexType name="Type">
<sequence>
<element ref="tns:parent" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:variable" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:function" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="name" type="tns:QName" use="required"/>
</complexType>
<!-- variable -->
<element name="variable" type="tns:Variable"/>
<complexType name="Variable" mixed="true">
<complexContent>
<extension base="tns:Container">
<attribute name="name" type="tns:QName" use="required"/>
<attribute name="select" type="tns:Expression" use="optional"/>
</extension>
</complexContent>
</complexType>
<!-- set -->
<element name="set" type="tns:Set"/>
<complexType name="Set">
<anyAttribute namespace="##any" processContents="skip"/>
</complexType>
<!-- if -->
<element name="if" type="tns:SimpleConditional"/>
<!-- while -->
<element name="while" type="tns:SimpleConditional"/>
<complexType name="SimpleConditional" mixed="true">
<complexContent>
<extension base="tns:Container">
<attribute name="test" type="tns:Expression" use="required"/>
</extension>
</complexContent>
</complexType>
<!-- choose -->
<element name="choose" type="tns:Choose"/>
<complexType name="Choose">
<sequence>
<element ref="tns:when" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tns:otherwise" minOccurs="0" maxOccurs="1"/>
</sequence>
</complexType>
<element name="when" type="tns:SimpleConditional"/>
<element name="otherwise" type="tns:Container"/>
<group name="top-level-elements">
<choice>
<!-- conditionals -->
<element ref="tns:choose"/>
<element ref="tns:if"/>
<element ref="tns:while"/>
<!-- control statements -->
<element ref="tns:for-each"/>
<element ref="tns:return"/>
<!-- simples -->
<element ref="tns:variable"/>
<element ref="tns:set"/>
<element ref="tns:log"/>
<element ref="tns:eval"/>
<element ref="tns:do"/>
<!-- definitions -->
<element ref="tns:function"/>
<element ref="tns:procedure"/>
<element ref="tns:type"/>
</choice>
</group>
<!-- general-purpose container type -->
<complexType name="Container" mixed="true">
<sequence>
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##local" processContents="lax"/>
<any namespace="##other" processContents="lax"/>
<group ref="tns:top-level-elements"/>
</choice>
</sequence>
<!-- <anyAttribute namespace="##other" processContents="skip"/> -->
</complexType>
<simpleType name="Expression">
<restriction base="string">
<!-- o:Path patterns go here -->
</restriction>
</simpleType>
<simpleType name="QName">
<!-- QName does not have to be prefix qualified -->
<union memberTypes="NCName QName"/>
</simpleType>
</schema>