<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns="http://www.w3.org/2000/12/xforms" targetNamespace="http://www.w3.org/2000/12/xforms" xmlns:xfm="http://www.w3.org/2000/12/xforms" elementFormDefault="qualified"> <!-- We actually need to import the schema for XMLSchema, to use the <xsd:schema> element. Commented out temporarily to avoid problems with some schema validators. <xsd:import namespace="http://www.w3.org/2000/10/XMLSchema"/> --> <!-- Defines the schema for the XForm <model> element, and everything contained in it. This includes the XForms defined data types, and XForms specific properties whose values are dynamic, and may may change at runtime. It also contains a definition of the XForms Simple Syntax elements, which can be used as an alternative to XML syntax, for defining the XForms model's elements. --> <!-- XForms structure element definitions. --> <!-- Definition of the xform container element. --> <xsd:element name="xform"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="model"/> <xsd:element ref="instance"/> <xsd:element ref="submit"/> <xsd:element ref="bind"/> </xsd:choice> <xsd:attribute name="id" type="xsd:ID" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of top-level model element. --> <xsd:element name="model"> <xsd:complexType> <xsd:choice> <xsd:element ref="xsd:schema"/> <xsd:element ref="simple"/> <xsd:sequence> <xsd:element ref="xsd:schema"/> <xsd:element ref="simple"/> </xsd:sequence> </xsd:choice> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="name" type="xsd:NCName" use="optional"/> <xsd:attribute name="href" type="xsd:uriReference" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of top-level instance element. --> <xsd:element name="instance"> <xsd:complexType> <xsd:sequence> <xsd:any namespace="##any" processContents="skip" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="model" type="xsd:IDREF" use="optional"/> <xsd:attribute name="href" type="xsd:uriReference" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of top-level submit element. --> <xsd:element name="submit"> <xsd:complexType> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="target" type="xsd:uriReference" use="required"/> <xsd:attribute name="method" type="xsd:string" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of top-level bind element. --> <xsd:element name="bind"> <xsd:complexType> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="ref" type="xsd:string" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of XForms expression type. Note: we need to replace this with a real XForm expression type, if we can manage to define one that fits our expression language, if there is a way to do that using XML Schema (may be possible with the correct combination of string & patterns). --> <xsd:simpleType name="xfmExpr"> <xsd:restriction base="xsd:string"/> </xsd:simpleType> <!-- XForms types used in attribute group definitions. Note: all of these are simple derivations from xfmExpr. we need to change them to enforce the desired typed result, if there is a way to do that using XML schema. --> <!-- Definition of stringExpr type, used for expressions that must return a String value. --> <xsd:simpleType name="stringExpr"> <xsd:union memberTypes="xsd:string xfmExpr" /> </xsd:simpleType> <!-- Definition of boolExpr type, used for expressions that must return a Boolean value. --> <xsd:simpleType name="boolExpr"> <xsd:union memberTypes="xsd:boolean xfmExpr" /> </xsd:simpleType> <!-- Definition of numberExpr type, used for expressions that must return a Number value. --> <xsd:simpleType name="numberExpr"> <xsd:union memberTypes="xsd:decimal xfmExpr" /> </xsd:simpleType> <!-- Definition of positiveIntExpr type, used for expressions that must return a positive integer value. --> <xsd:simpleType name="positiveIntExpr"> <xsd:union memberTypes="xsd:positiveInteger xfmExpr" /> </xsd:simpleType> <!-- Definition of dateExpr type, used for expressions that must return a Date value. --> <xsd:simpleType name="dateExpr"> <xsd:union memberTypes="xsd:date xfmExpr" /> </xsd:simpleType> <!-- Definition of timeExpr type, used for expressions that must return a Time value. --> <xsd:simpleType name="timeExpr"> <xsd:union memberTypes="xsd:time xfmExpr" /> </xsd:simpleType> <!-- Definition of durationExpr type, used for expressions that must return a Duration value. --> <xsd:simpleType name="durationExpr"> <xsd:union memberTypes="xsd:timeDuration xfmExpr" /> </xsd:simpleType> <!-- Definition of schemeExpr type, used for expressions that must return a list of zero or more scheme values. Scheme is used to restrict the value space of URIs to specific URI schemes. --> <xsd:simpleType name="schemeType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-z]+"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="schemeExpr"> <xsd:union memberTypes="schemeType xfmExpr" /> </xsd:simpleType> <!-- Definition of uriExpr type, used for expressions that must return a URI value. --> <xsd:simpleType name="uriExpr"> <xsd:union memberTypes="xsd:uriReference xfmExpr" /> </xsd:simpleType> <!-- Definition of mediaTypeExpr type, used for expressions that must return a list of zero or more MediaType values. MediaType is used to restrict the value space of Binary elements to one or more MIME media Types. --> <xsd:simpleType name="mediaTypeType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-z]+/[a-z]+"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="mediaTypeExpr"> <xsd:union memberTypes="mediaTypeType xfmExpr" /> <xsd:restriction base="xfmExpr"/> </xsd:simpleType> <!-- Definition of binaryExpr type, used for expressions that must return a Binary value. --> <xsd:simpleType name="binaryExpr"> <xsd:union memberTypes="xsd:binary xfmExpr" /> </xsd:simpleType> <!-- Definition of currencyType type, a type used for a single, 3-character currency code. --> <xsd:simpleType name="currencyType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Z]{3}"/> </xsd:restriction> </xsd:simpleType> <!-- Definition of currencyExpr type, used for expressions that must return a list of zero or more 3-character currency codes. --> <xsd:simpleType name="currencyExpr"> <xsd:union memberTypes="currencyType xfmExpr" /> </xsd:simpleType> <!-- XForms Specific Properties attribute groups --> <xsd:attributeGroup name="XFSPcommonMinusEnum"> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="required" type="boolExpr" use="default" value="false"/> <xsd:attribute name="readOnly" type="boolExpr" use="default" value="false"/> <xsd:attribute name="relevant" type="boolExpr" use="default" value="true"/> <xsd:attribute name="validate" type="boolExpr" use="default" value="true"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcommon"> <xsd:attributeGroup ref="XFSPcommonMinusEnum"/> <xsd:attribute name="enum" use="optional"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="open"/> <xsd:enumeration value="closed"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPname"> <xsd:attribute name="name" type="xsd:NCName" use="required"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcommonMinusEnumSimple"> <xsd:attributeGroup ref="XFSPname"/> <xsd:attributeGroup ref="XFSPcommonMinusEnum"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcommonSimple"> <xsd:attributeGroup ref="XFSPname"/> <xsd:attributeGroup ref="XFSPcommon"/> </xsd:attributeGroup> <!-- Attribute group defining @calc and @choices. choices is an expression that returns a list of enumerated, properly typed values at runtime. calc returns a single value of the correct type, at runtime. --> <xsd:attributeGroup name="XFSPcalcAndChoices"> <xsd:attribute name="calc" type="xfmExpr" use="optional"/> <xsd:attribute name="choices" type="xfmExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesString"> <xsd:attribute name="calc" type="stringExpr" use="optional"/> <xsd:attribute name="choices" type="stringExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesBoolean"> <xsd:attribute name="calc" type="boolExpr" use="optional"/> <xsd:attribute name="choices" type="boolExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesNumber"> <xsd:attribute name="calc" type="numberExpr" use="optional"/> <xsd:attribute name="choices" type="numberExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesDate"> <xsd:attribute name="calc" type="dateExpr" use="optional"/> <xsd:attribute name="choices" type="dateExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesTime"> <xsd:attribute name="calc" type="timeExpr" use="optional"/> <xsd:attribute name="choices" type="timeExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesDuration"> <xsd:attribute name="calc" type="durationExpr" use="optional"/> <xsd:attribute name="choices" type="durationExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesURI"> <xsd:attribute name="calc" type="uriExpr" use="optional"/> <xsd:attribute name="choices" type="uriExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesBinary"> <xsd:attribute name="calc" type="binaryExpr" use="optional"/> <xsd:attribute name="choices" type="binaryExpr" use="optional"/> </xsd:attributeGroup> <xsd:attributeGroup name="XFSPcalcAndChoicesCurrency"> <xsd:attribute name="calc" type="currencyExpr" use="optional"/> <xsd:attribute name="choices" type="currencyExpr" use="optional"/> </xsd:attributeGroup> <!-- applied to Number, and Money --> <xsd:attributeGroup name="XFSPmmNumber"> <xsd:attribute name="minInclusive" type="numberExpr" use="optional"/> <xsd:attribute name="minExclusive" type="numberExpr" use="optional"/> <xsd:attribute name="maxInclusive" type="numberExpr" use="optional"/> <xsd:attribute name="maxExclusive" type="numberExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <xsd:attributeGroup name="XFSPmmNumberSimple"> <xsd:attribute name="min" type="numberExpr" use="optional"/> <xsd:attribute name="max" type="numberExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <!-- applied to Date --> <xsd:attributeGroup name="XFSPmmDate"> <xsd:attribute name="minInclusive" type="dateExpr" use="optional"/> <xsd:attribute name="minExclusive" type="dateExpr" use="optional"/> <xsd:attribute name="maxInclusive" type="dateExpr" use="optional"/> <xsd:attribute name="maxExclusive" type="dateExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <xsd:attributeGroup name="XFSPmmDateSimple"> <xsd:attribute name="min" type="dateExpr" use="optional"/> <xsd:attribute name="max" type="dateExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <!-- applied to Duration --> <xsd:attributeGroup name="XFSPmmDuration"> <xsd:attribute name="minInclusive" type="durationExpr" use="optional"/> <xsd:attribute name="minExclusive" type="durationExpr" use="optional"/> <xsd:attribute name="maxInclusive" type="durationExpr" use="optional"/> <xsd:attribute name="maxExclusive" type="durationExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <xsd:attributeGroup name="XFSPmmDurationSimple"> <xsd:attribute name="min" type="durationExpr" use="optional"/> <xsd:attribute name="max" type="durationExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <!-- applied to Time --> <xsd:attributeGroup name="XFSPmmTime"> <xsd:attribute name="minInclusive" type="timeExpr" use="optional"/> <xsd:attribute name="minExclusive" type="timeExpr" use="optional"/> <xsd:attribute name="maxInclusive" type="timeExpr" use="optional"/> <xsd:attribute name="maxExclusive" type="timeExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <xsd:attributeGroup name="XFSPmmTimeSimple"> <xsd:attribute name="min" type="timeExpr" use="optional"/> <xsd:attribute name="max" type="timeExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <!-- applied to String, Binary, URI --> <xsd:attributeGroup name="XFSPlengthNumber"> <xsd:attribute name="length" type="positiveIntExpr" use="optional"/> <xsd:attribute name="minLength" type="positiveIntExpr" use="optional"/> <xsd:attribute name="maxLength" type="positiveIntExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <xsd:attributeGroup name="XFSPlengthNumberSimple"> <xsd:attribute name="length" type="positiveIntExpr" use="optional"/> <xsd:attribute name="min" type="positiveIntExpr" use="optional"/> <xsd:attribute name="max" type="positiveIntExpr" use="optional"/> </xsd:attributeGroup> <!-- --> <!-- applied to Number, and Money --> <xsd:attributeGroup name="XFSPspNumber"> <xsd:attribute name="scale" type="positiveIntExpr" use="optional"/> <xsd:attribute name="precision" type="positiveIntExpr" use="optional"/> </xsd:attributeGroup> <!-- XForms basic Data types for Models in Schema syntax --> <!-- Definition of string type. --> <xsd:complexType name="string"> <xsd:complexContent> <xsd:extension base="xsd:string"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPlengthNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesString"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of boolean type. --> <xsd:complexType name="boolean"> <xsd:complexContent> <xsd:extension base="xsd:boolean"> <xsd:attributeGroup ref="XFSPcommonMinusEnum"/> <xsd:attribute name="calc" type="boolExpr" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of number type. --> <xsd:complexType name="number"> <xsd:complexContent> <xsd:extension base="xsd:decimal"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPmmNumber"/> <xsd:attributeGroup ref="XFSPspNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesNumber"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of currency type. --> <xsd:complexType name="currency"> <xsd:complexContent> <xsd:extension base="currencyType"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesCurrency"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of money type. Alternative B: compound datatype --> <xsd:complexType name="money"> <xsd:sequence> <xsd:element name="value"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="calc" type="numberExpr"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="currency"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="currencyType"> <xsd:attribute name="calc" type="currencyExpr"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- allow zero or more allowCurrency elements to restrict the value space of money. --> <xsd:element name="allowCurrency" type="currencyExpr" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPmmNumber"/> <xsd:attributeGroup ref="XFSPspNumber"/> </xsd:complexType> <!-- Definition of date type. --> <xsd:complexType name="date"> <xsd:complexContent> <xsd:extension base="xsd:date"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPmmDate"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesDate"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of time type. --> <xsd:complexType name="time"> <xsd:complexContent> <xsd:extension base="xsd:time"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPmmTime"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesTime"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of duration type. --> <xsd:complexType name="duration"> <xsd:complexContent> <xsd:extension base="xsd:timeDuration"> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPmmDuration"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesDuration"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- --> <!-- Definition of uri type. --> <xsd:complexType name="uri"> <xsd:complexContent> <xsd:extension base="xsd:uriReference"> <xsd:sequence> <!-- allow zero or more scheme elements to restrict the value space of the uri. --> <xsd:element name="scheme" type="schemeExpr" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPlengthNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesURI"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- Definition of binary type. --> <xsd:complexType name="binary"> <xsd:complexContent> <xsd:extension base="xsd:binary"> <xsd:sequence> <!-- allow zero or more mediaType elements to restrict the value space of the binary. --> <xsd:element name="mediaType" type="mediaTypeExpr" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommon"/> <xsd:attributeGroup ref="XFSPlengthNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesBinary"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- XForms simple syntax element definitions Structure elements, followed by datatype elements. --> <!-- Definition of the simple element, used to contain the simple syntax element declarations. --> <xsd:element name="simple"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="string"/> <xsd:element ref="boolean"/> <xsd:element ref="number"/> <xsd:element ref="currency"/> <xsd:element ref="money"/> <xsd:element ref="date"/> <xsd:element ref="time"/> <xsd:element ref="duration"/> <xsd:element ref="uri"/> <xsd:element ref="binary"/> <xsd:element ref="element"/> <xsd:element ref="array"/> <xsd:element ref="group"/> <xsd:element ref="switch"/> <xsd:element ref="union"/> </xsd:choice> <xsd:attribute name="id" type="xsd:ID" use="optional"/> <xsd:attribute name="name" type="xsd:NCName" use="optional"/> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax group element. --> <xsd:element name="group"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="string"/> <xsd:element ref="boolean"/> <xsd:element ref="number"/> <xsd:element ref="currency"/> <xsd:element ref="money"/> <xsd:element ref="date"/> <xsd:element ref="time"/> <xsd:element ref="duration"/> <xsd:element ref="uri"/> <xsd:element ref="binary"/> <xsd:element ref="element"/> <xsd:element ref="switch"/> <xsd:element ref="union"/> </xsd:choice> <xsd:attributeGroup ref="XFSPname"/> </xsd:complexType> </xsd:element> <!-- The occurs attribute group used on array. --> <xsd:attributeGroup name="occurs"> <xsd:attribute name="minOccurs" use="default" value="1"> <xsd:simpleType> <xsd:union memberTypes="xfmExpr xsd:nonNegativeInteger"/> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="maxOccurs" use="default" value="1"> <xsd:simpleType> <xsd:union memberTypes="xfmExpr xsd:nonNegativeInteger"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="unbounded"/> </xsd:restriction> </xsd:simpleType> </xsd:union> </xsd:simpleType> </xsd:attribute> </xsd:attributeGroup> <!-- Definition of simple syntax array element. Issue: should we allow switches or unions? --> <xsd:element name="array"> <xsd:complexType> <xsd:choice> <xsd:element ref="string"/> <xsd:element ref="boolean"/> <xsd:element ref="number"/> <xsd:element ref="currency"/> <xsd:element ref="money"/> <xsd:element ref="date"/> <xsd:element ref="time"/> <xsd:element ref="duration"/> <xsd:element ref="uri"/> <xsd:element ref="binary"/> <xsd:element ref="element"/> </xsd:choice> <xsd:attribute name="name" type="xsd:NCName" use="optional"/> <xsd:attributeGroup ref="occurs"/> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax union element. Note: the schema for <union> requires a name attribute on its child datatypes because it simply reuses their definitions, which do. The spec says name isn't required on child datatypes. This is a known inconsistency that will be fixed in a future version. --> <xsd:element name="union"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="string"/> <xsd:element ref="boolean"/> <xsd:element ref="number"/> <xsd:element ref="currency"/> <xsd:element ref="money"/> <xsd:element ref="date"/> <xsd:element ref="time"/> <xsd:element ref="duration"/> <xsd:element ref="uri"/> <xsd:element ref="binary"/> </xsd:choice> <xsd:attributeGroup ref="XFSPname"/> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax switch element. --> <xsd:element name="switch"> <xsd:complexType> <xsd:sequence> <xsd:element name="case" maxOccurs="unbounded"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="string"/> <xsd:element ref="boolean"/> <xsd:element ref="number"/> <xsd:element ref="currency"/> <xsd:element ref="money"/> <xsd:element ref="date"/> <xsd:element ref="time"/> <xsd:element ref="duration"/> <xsd:element ref="uri"/> <xsd:element ref="binary"/> <xsd:element ref="element"/> <xsd:element ref="group"/> <xsd:element ref="array"/> </xsd:choice> <xsd:attributeGroup ref="XFSPname"/> <xsd:attribute name="condition" type="xfmExpr" use="optional"/> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attributeGroup ref="XFSPname"/> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax element element. --> <xsd:element name="element" id="element"> <xsd:complexType> <xsd:attribute name="type" type="xsd:QName" use="required"/> <xsd:attributeGroup ref="XFSPcommonMinusEnumSimple"/> </xsd:complexType> </xsd:element> <!-- Definition of the mask facet, used in strings and currency, in simple syntax only. Modeled after WAP/WML's format attribute. --> <xsd:simpleType name="maskType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="((A|a|X|x|N|n|M|m)|(\\.))*([0-9\*](A|a|X|x|N|n|M|m))?"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="maskExpr"> <xsd:union memberTypes="maskType xfmExpr"/> </xsd:simpleType> <!-- Definition of simple syntax string element. --> <xsd:element name="string" id="string"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:string"> <xsd:sequence> <!-- allow zero or more masks or patterns, but not a mixture --> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="mask" type="maskType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="pattern" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:choice> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPlengthNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesString"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax boolean element. --> <xsd:element name="boolean"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:boolean"> <xsd:attributeGroup ref="XFSPcommonMinusEnumSimple"/> <xsd:attribute name="calc" type="boolExpr" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax number element. --> <xsd:element name="number"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:decimal"> <xsd:sequence> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:decimal" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPmmNumberSimple"/> <xsd:attributeGroup ref="XFSPspNumber"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesNumber"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax currency element. --> <xsd:element name="currency"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="currencyType"> <xsd:sequence> <!-- allow zero or more masks --> <xsd:element name="mask" type="maskType" minOccurs="0" maxOccurs="unbounded"/> <!-- allow zero or more enumerations --> <xsd:element name="value" type="currencyType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPcalcAndChoices"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax money element. Alternative B: compound datatype --> <xsd:element name="money"> <xsd:complexType> <xsd:sequence> <xsd:element name="value"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="calc" type="numberExpr"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="currency"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="currencyType"> <xsd:attribute name="calc" type="currencyExpr"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- allow zero or more allowCurrency elements to restrict the value space of money. --> <xsd:element name="allowCurrency" type="currencyExpr" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPmmNumberSimple"/> <xsd:attributeGroup ref="XFSPspNumber"/> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax date element. --> <xsd:element name="date"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:date"> <xsd:sequence> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:date" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPmmDateSimple"/> <xsd:attribute name="precision" use="optional"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="years"/> <xsd:enumeration value="months"/> <xsd:enumeration value="days"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attributeGroup ref="XFSPcalcAndChoicesDate"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax time element. --> <xsd:element name="time"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:time"> <xsd:sequence> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:time" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPmmTimeSimple"/> <xsd:attribute name="precision" use="optional"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="hours"/> <xsd:enumeration value="minutes"/> <xsd:enumeration value="seconds"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attributeGroup ref="XFSPcalcAndChoicesTime"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax duration element. --> <xsd:element name="duration"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:timeDuration"> <xsd:sequence> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:timeDuration" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPmmDurationSimple"/> <xsd:attribute name="precision" use="optional"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="years"/> <xsd:enumeration value="months"/> <xsd:enumeration value="days"/> <xsd:enumeration value="hours"/> <xsd:enumeration value="minutes"/> <xsd:enumeration value="seconds"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attributeGroup ref="XFSPcalcAndChoicesDuration"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax uri element. --> <xsd:element name="uri"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:uriReference"> <xsd:sequence> <!-- allow zero or more scheme qualifiers --> <xsd:element name="scheme" type="schemeExpr" minOccurs="0" maxOccurs="unbounded"/> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:uriReference" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPlengthNumberSimple"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesURI"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> <!-- Definition of simple syntax binary element. --> <xsd:element name="binary"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="xsd:binary"> <xsd:sequence> <!-- allow zero or more mediaType qualifiers --> <xsd:element name="mediaType" type="mediaTypeExpr" minOccurs="0" maxOccurs="unbounded"/> <!-- allow zero or more enumerations --> <xsd:element name="value" type="xsd:binary" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="XFSPcommonSimple"/> <xsd:attributeGroup ref="XFSPlengthNumberSimple"/> <xsd:attributeGroup ref="XFSPcalcAndChoicesBinary"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> </xsd:schema> |