Skip to content

Instantly share code, notes, and snippets.

@brianphillips
Created May 24, 2011 11:54
Show Gist options
  • Save brianphillips/988583 to your computer and use it in GitHub Desktop.
Save brianphillips/988583 to your computer and use it in GitHub Desktop.
product configuration XSD
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.1 U (http://www.xmlspy.com) by Ryan Dewell (Digital River, Inc.) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:annotation>
<xsd:documentation>Root Elements</xsd:documentation>
</xsd:annotation>
<xsd:element name="product-configuration">
<xsd:annotation>
<xsd:documentation>Encapsulates an entire set of product configuration information.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="fields" minOccurs="0"/>
<xsd:element ref="custom-opt-in" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="delivery" minOccurs="0"/>
<xsd:element ref="pricing" minOccurs="0" maxOccurs="4"/>
<xsd:element ref="subscription-pricing" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="maintenance-agreement-product" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="template">
<xsd:annotation>
<xsd:documentation>Encapsulates one or more groups, or one or more delivery methods that can be easily reused in other parts of a product configuration.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice>
<xsd:element ref="group" maxOccurs="unbounded"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="deliver-custom"/>
<xsd:element ref="deliver-cmps"/>
<xsd:element ref="deliver-email"/>
<xsd:element ref="deliver-fixed-license"/>
<xsd:element ref="deliver-license"/>
<xsd:element ref="deliver-package"/>
<xsd:element ref="deliver-standard-algorithm"/>
<xsd:element ref="deliver-standard-download"/>
<xsd:element ref="deliver-standard-list"/>
<xsd:element ref="deliver-background"/>
</xsd:choice>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="function">
<xsd:annotation>
<xsd:documentation>Encapsulates a stand-alone script function.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice>
<xsd:element ref="script"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:annotation>
<xsd:documentation>Main Elements</xsd:documentation>
</xsd:annotation>
<xsd:element name="include-global-template">
<xsd:annotation>
<xsd:documentation>Includes a global, pre-defined product configuration template.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="include-template">
<xsd:annotation>
<xsd:documentation>Includes a custom, pre-defined product configuration template.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="fields">
<xsd:annotation>
<xsd:documentation>Defines a product's custom fields, how those fields should be displayed, as well as validating the data within fields. Certain fields can also participate in delivery options.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="hidden" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attributeGroup ref="customFieldAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element ref="section"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="custom-opt-in">
<xsd:annotation>
<xsd:documentation>Defines a product's custom options, how those options should be displayed, as well as validating the option.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" nillable="false" type="xsd:string"/>
<xsd:element name="display" nillable="false" type="markupType"/>
<xsd:element name="display-error-highlite" nillable="false" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
<xsd:element name="type" nillable="false">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="checkbox"/>
<xsd:enumeration value="text"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element ref="validation" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="delivery" type="deliveryType">
<xsd:annotation>
<xsd:documentation>Defines the base delivery options that will always occur during an order. This is an optional element because there may be delivery nodes defined within a select. Overall, however, a product configuration should contain at least one delivery element somewhere in it.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="pricing">
<xsd:annotation>
<xsd:documentation>Defines how a product's price will be calculated and overrides the behavior of any custom fields which are set to participate in pricing. </xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice>
<xsd:element ref="script"/>
</xsd:choice>
<xsd:attribute name="type" type="pricingOptions" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="subscription-pricing">
<xsd:annotation>
<xsd:documentation>
Defines the subscription pricing structure.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="pay-period" minOccurs="1" maxOccurs="1">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="monthly"/>
<xsd:enumeration value="three_monthly"/>
<xsd:enumeration value="six_monthly"/>
<xsd:enumeration value="yearly"/>
<xsd:enumeration value="two_yearly"/>
<xsd:enumeration value="three_yearly"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="pay-start" type="xsd:positiveInteger" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>The default is the start of the next payment period. For example, for a monthly subscription, if the order date is August 21., by default, if this element is not present, subscription charges will start to apply on September 21st.. This element can be used to specify the number of days after order date to start subscription charges, should the default behavior be undesirable.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="disable-auto-rebill-optout" type="xsd:boolean" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>This is for auto rebilling.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="rebilling-tc-url" type="xsd:string" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>This is for auto rebilling
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="script" minOccurs="1" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>
This is the script to specify the subscription amount.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="reminder-email" type="xsd:positiveInteger" minOccurs="0" maxOccurs="1"/>
<xsd:element name="currency" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>
This is for to allow vendor to specify the subscription price in other currency.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="USD"/>
<xsd:enumeration value="EUR"/>
<xsd:enumeration value="GBP"/>
<xsd:enumeration value="AUD"/>
<xsd:enumeration value="CAD"/>
<xsd:enumeration value="SEK"/>
<xsd:enumeration value="NZD"/>
<xsd:enumeration value="NOK"/>
<xsd:enumeration value="JPY"/>
<xsd:enumeration value="HKD"/>
<xsd:enumeration value="DKK"/>
<xsd:enumeration value="CHF"/>
<xsd:enumeration value="ZAR"/>
<xsd:enumeration value="SGD"/>
<xsd:enumeration value="CNY"/>
<xsd:enumeration value="INR"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="run-delivery-for-renewals" type="xsd:boolean" minOccurs="0" maxOccurs="1" />
<xsd:element name="notify-opted-out-subscription" type="xsd:boolean" minOccurs="0" maxOccurs="1" />
<xsd:element name="subscription-notification" minOccurs="0" maxOccurs="1" >
<xsd:annotation>
<xsd:documentation>
This for to allow vendor to specify that how many days before renewal email notification will be send to customer.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a-month-before" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
<xsd:element name="a-week-before" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
<xsd:element name="a-day-before" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="subscription-timespan-limit" minOccurs="0" maxOccurs="1" >
<xsd:annotation>
<xsd:documentation>Defines the time span limit for which any subcription product purchase will be active.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice minOccurs="1" maxOccurs="1">
<xsd:element name="max-rebill-count-allowed" type="xsd:positiveInteger" minOccurs="0" maxOccurs="1" />
<xsd:element name="subscription-date-range" minOccurs="0" maxOccurs="1" >
<xsd:complexType>
<xsd:attribute name="start-date" type="xsd:string" use="required"/>
<xsd:attribute name="end-date" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="infinite" minOccurs="0" maxOccurs="1" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="maintenance-agreement-product">
<xsd:annotation>
<xsd:documentation>Defines a product's maintenance agreement product, if any.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="id" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="script">
<xsd:annotation>
<xsd:documentation>Contains a block of scripting elements.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="define-parameter" minOccurs="0" maxOccurs="unbounded"/>
<xsd:choice maxOccurs="unbounded">
<xsd:group ref="scriptLanguageGroup"/>
<xsd:element ref="remote.connect"/>
<xsd:element ref="call-function"/>
<xsd:element ref="list.next-value"/>
<xsd:element ref="list.use-value"/>
<!--<xsd:group ref="scriptModuleGroup"/>-->
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!--Complex Types-->
<xsd:complexType name="markupType" mixed="true">
<xsd:choice>
<xsd:element ref="resource"/>
<xsd:group ref="markupGroup" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
</xsd:complexType>
<!--<xsd:complexType name="markupType" mixed="true">
<xsd:group ref="markupGroup" minOccurs="0" maxOccurs="unbounded"/>
</xsd:complexType>-->
<xsd:complexType name="requiredScriptingElementType">
<xsd:choice maxOccurs="unbounded">
<xsd:group ref="scriptLanguageGroup"/>
<xsd:group ref="scriptValueGroup"/>
<!--<xsd:group ref="scriptModuleGroup"/>-->
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="requiredSingleScriptingValueType">
<xsd:choice>
<xsd:group ref="scriptValueGroup"/>
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="contentsType" mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="markupGroup"/>
<xsd:group ref="customDisplayElements"/>
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="functionType">
<xsd:choice minOccurs="0">
<xsd:element name="parameters">
<xsd:complexType>
<xsd:group ref="scriptValueGroup" maxOccurs="unbounded"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="deliveryType">
<xsd:choice>
<xsd:element ref="script"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="include-global-template"/>
<xsd:element ref="include-template"/>
<xsd:element ref="deliver-standard-algorithm"/>
<xsd:element ref="deliver-standard-list"/>
<xsd:element ref="deliver-fixed-license"/>
<xsd:element ref="deliver-email"/>
<xsd:element ref="deliver-custom"/>
<xsd:element ref="deliver-cmps"/>
<xsd:element ref="deliver-package"/>
<xsd:element ref="deliver-license"/>
<xsd:element ref="deliver-standard-download"/>
<xsd:element ref="deliver-background"/>
<!--<xsd:element ref="deliver-cdrom" minOccurs="0" maxOccurs="0"/>-->
</xsd:choice>
</xsd:choice>
</xsd:complexType>
<!--Attributes-->
<xsd:attributeGroup name="licenseAttributes">
<xsd:annotation>
<xsd:documentation>Attributes common to all license delivery methods.</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="reference" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="default_license_name" use="optional" default="full_name">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="full_name"/>
<xsd:enumeration value="company"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:attributeGroup name="algorithmAttributes">
<xsd:attributeGroup ref="namedComponentIDAttributes"/>
<xsd:attribute name="type" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="java"/>
<xsd:enumeration value="c++"/>
<xsd:enumeration value="perl"/>
<xsd:enumeration value="c"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="encode" use="optional" default="latin1">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="latin1"/>
<xsd:enumeration value="utf8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="decode" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="latin1"/>
<xsd:enumeration value="utf8"/>
<xsd:enumeration value="none"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:attributeGroup name="namedComponentIDAttributes">
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="componentIdentificationAttributes">
<xsd:attribute name="id" type="requiredStringDataType" use="required"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="variableAccessAttributes">
<xsd:attribute name="class" type="requiredVariableNameType" use="required"/>
<xsd:attribute name="field" type="requiredVariableNameType" use="required"/>
<xsd:attribute name="index" type="requiredStringDataType"/>
<xsd:attribute name="separate-multiple" type="xsd:boolean" use="optional" default="true"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="customFieldPricingAttributes">
<xsd:attribute name="price-EUR" type="priceDataType" use="optional"/>
<xsd:attribute name="price-GBP" type="priceDataType" use="optional"/>
<xsd:attribute name="price-AUD" type="priceDataType" use="optional"/>
<xsd:attribute name="price-CAD" type="priceDataType" use="optional"/>
<xsd:attribute name="price-SEK" type="priceDataType" use="optional"/>
<xsd:attribute name="price-NZD" type="priceDataType" use="optional"/>
<xsd:attribute name="price-NOK" type="priceDataType" use="optional"/>
<xsd:attribute name="price-JPY" type="priceDataType" use="optional"/>
<xsd:attribute name="price-HKD" type="priceDataType" use="optional"/>
<xsd:attribute name="price-DKK" type="priceDataType" use="optional"/>
<xsd:attribute name="price-CHF" type="priceDataType" use="optional"/>
<xsd:attribute name="price-ZAR" type="priceDataType" use="optional"/>
<xsd:attribute name="price-SGD" type="priceDataType" use="optional"/>
<xsd:attribute name="price-CNY" type="priceDataType" use="optional"/>
<xsd:attribute name="price-INR" type="priceDataType" use="optional"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="customFieldAttributes">
<xsd:attribute name="class" type="requiredVariableNameType" use="optional"/>
<xsd:attribute name="field" type="requiredVariableNameType" use="required"/>
<xsd:attribute name="display" type="requiredStringDataType" use="required"/>
<xsd:attribute name="default" type="requiredStringDataType" use="optional"/>
</xsd:attributeGroup>
<!--Groups-->
<xsd:group name="scriptLanguageGroup">
<xsd:annotation>
<xsd:documentation>Composed of script elements that don't return a value, but define core language features.</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="assign"/>
<xsd:element ref="if"/>
<xsd:element ref="debug"/>
<xsd:element ref="while"/>
<xsd:element ref="increment"/>
<xsd:element ref="decrement"/>
<xsd:element ref="return"/>
</xsd:choice>
</xsd:group>
<xsd:group name="scriptValueGroup">
<xsd:annotation>
<xsd:documentation>Composed of scripting elements that return a value.</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="variable"/>
<xsd:element ref="markup"/>
<xsd:element ref="static"/>
<xsd:element ref="date"/>
<xsd:element ref="value-of"/>
<xsd:element ref="value-count"/>
<xsd:element ref="replace"/>
<xsd:element ref="split"/>
<xsd:element ref="join"/>
<xsd:element ref="substring"/>
<xsd:element ref="trim"/>
<xsd:element ref="add"/>
<xsd:element ref="multiply"/>
<xsd:element ref="divide"/>
<xsd:element ref="subtract"/>
<xsd:element ref="append"/>
<xsd:element ref="true"/>
<xsd:element ref="false"/>
<xsd:element ref="and"/>
<xsd:element ref="or"/>
<xsd:element ref="not"/>
<xsd:element ref="upper-case"/>
<xsd:element ref="lower-case"/>
<xsd:element ref="remote.connect"/>
<xsd:element ref="reglist"/>
<xsd:element ref="algorithm"/>
<xsd:element ref="list.contains"/>
<xsd:element ref="list.use-value"/>
<xsd:element ref="list.next-value"/>
<xsd:element ref="sequence.next-value"/>
<xsd:element ref="activate-soft.add-license"/>
<xsd:element ref="activate-soft.generate"/>
<xsd:element ref="armadillo-generator"/>
<xsd:element ref="stardust-generator"/>
<xsd:element ref="redregistration.generate"/>
<xsd:element ref="digital-lock.generate"/>
<xsd:element ref="softguard.generate"/>
<xsd:element ref="sharelock.generate"/>
<xsd:element ref="basket-contains"/>
<xsd:element ref="basket-count"/>
<xsd:element ref="check"/>
<xsd:element ref="check-asp-member"/>
<xsd:element ref="check-previous-orders"/>
<xsd:element ref="check-european-country"/>
<xsd:element ref="call-function"/>
</xsd:choice>
</xsd:group>
<xsd:group name="customDisplayElements">
<xsd:choice>
<xsd:element ref="quantity-pricing"/>
<xsd:element ref="textbox"/>
<xsd:element ref="select"/>
<xsd:element ref="table"/>
<xsd:element ref="textarea"/>
</xsd:choice>
</xsd:group>
<xsd:group name="markupGroup">
<xsd:choice>
<xsd:element ref="b"/>
<xsd:element ref="price"/>
<xsd:element ref="value-of"/>
<xsd:element ref="br"/>
<xsd:element ref="link"/>
<xsd:element ref="vendor"/>
<xsd:element ref="product"/>
<xsd:element ref="a"/>
<xsd:element ref="sp"/>
</xsd:choice>
</xsd:group>
<!--Markup Elements-->
<xsd:element name="vendor">
<xsd:complexType>
<xsd:attribute name="id" type="requiredStringDataType" use="required"/>
<xsd:attribute name="field" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="name"/>
<xsd:enumeration value="support_email"/>
<xsd:enumeration value="website"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="product">
<xsd:complexType>
<xsd:attribute name="id" type="requiredStringDataType" use="required"/>
<xsd:attribute name="field" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="name"/>
<xsd:enumeration value="price"/>
<xsd:enumeration value="shipping"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="link">
<xsd:annotation>
<xsd:documentation>This element defines a hyperlink. The URL is not an attribute to faciliate use of value-of within it.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="link-url" type="markupType"/>
<xsd:element name="link-display" type="markupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Specifies the display text of the hyperlink. If no display is given, then the URL will be used for the display</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="a">
<xsd:complexType mixed="true">
<xsd:group ref="markupGroup" minOccurs="0" maxOccurs="unbounded"/>
<xsd:attribute name="href" type="requiredStringDataType" use="required"/>
<xsd:attribute name="target" type="requiredStringDataType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="sp" type="nullElementDataType">
<xsd:annotation>
<xsd:documentation>Specifies that a space character should be displayed.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="br" type="nullElementDataType">
<xsd:annotation>
<xsd:documentation>Creates a line break / new line.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="price" type="markupType">
<xsd:annotation>
<xsd:documentation>Any time a price should be displayed, it should be surrounded in this tag. This ensures that the price will be formatted according to the local currency. All values within this tag should be in US. Any conversion to other currencies will be performed automatically by this tag when necessary.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="display-resource">
<xsd:annotation>
<xsd:documentation>Displays a predefined resource</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="resource-parameter" type="markupType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="key" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resource">
<xsd:annotation>
<xsd:documentation>Displays markup based on locale</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="locale">
<xsd:complexType mixed="true">
<xsd:group ref="markupGroup" minOccurs="0" maxOccurs="unbounded"/>
<xsd:attribute name="language" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:maxLength value="2"/>
<xsd:minLength value="2"/>
<xsd:pattern value="\w{2}"/>
<xsd:pattern value="\w{2}-\w{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="country" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:maxLength value="2"/>
<xsd:minLength value="2"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="b" type="markupType">
<xsd:annotation>
<xsd:documentation>Causes the surrounded text to appear bolded.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<!--Script Language-->
<xsd:element name="variable">
<xsd:complexType>
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
<xsd:attribute name="index" type="requiredStringDataType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="return" type="requiredScriptingElementType">
<xsd:annotation>
<xsd:documentation>Immediately returns a value to the calling procedure. Additional code, if any, will not be executed.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="debug" type="requiredSingleScriptingValueType"/>
<xsd:element name="while">
<xsd:annotation>
<xsd:documentation>Evaluates a set of code repeatedly while its condition is true.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="condition"/>
<xsd:element ref="do"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="increment">
<xsd:annotation>
<xsd:documentation>Increments the value of a variable.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="variableAccessAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="decrement">
<xsd:annotation>
<xsd:documentation>Decrements the value of a variable.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="variableAccessAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="if">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="condition"/>
<xsd:element ref="do"/>
<xsd:element name="elseif" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="condition"/>
<xsd:element ref="do"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="else" minOccurs="0">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="do"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="assign">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredScriptingElementType">
<xsd:attributeGroup ref="variableAccessAttributes"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="define-parameter">
<xsd:complexType>
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="call-function">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="functionType">
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="condition" type="requiredScriptingElementType"/>
<xsd:element name="do" type="requiredScriptingElementType">
<xsd:annotation>
<xsd:documentation>Defines a set of scripting elements that will be executed if some condition is true.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="date">
<xsd:complexType>
<xsd:attribute name="format" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="join">
<xsd:annotation>
<xsd:documentation>Concatenates the values in a list into a single string using the given character.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredScriptingElementType">
<xsd:attribute name="with" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="value-count">
<xsd:annotation>
<xsd:documentation>Returns the number of elements in the specified named list.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="variableAccessAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="value-of">
<xsd:complexType>
<xsd:attributeGroup ref="variableAccessAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="split">
<xsd:annotation>
<xsd:documentation>Splits a value at the specified character and returns an array as the result.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredSingleScriptingValueType">
<xsd:attribute name="on" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value=";"/>
<xsd:enumeration value=":"/>
<xsd:enumeration value="|"/>
<xsd:enumeration value="\n"/>
<xsd:enumeration value=","/>
<xsd:enumeration value="-"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="replace">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredSingleScriptingValueType">
<xsd:attribute name="string" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="with" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="substring">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredSingleScriptingValueType">
<xsd:attribute name="start" type="requiredIntegerSimpleType" use="required"/>
<xsd:attribute name="length" type="requiredIntegerSimpleType" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="lower-case" type="requiredSingleScriptingValueType"/>
<xsd:element name="upper-case" type="requiredSingleScriptingValueType"/>
<xsd:element name="trim" type="requiredSingleScriptingValueType">
<xsd:annotation>
<xsd:documentation>This element trims white space from the front and back of the value specified within the block. The result of the trim is returned.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="divide" type="requiredScriptingElementType"/>
<xsd:element name="add" type="requiredScriptingElementType"/>
<xsd:element name="subtract" type="requiredScriptingElementType"/>
<xsd:element name="multiply" type="requiredScriptingElementType"/>
<xsd:element name="append" type="requiredScriptingElementType"/>
<xsd:element name="false" type="nullElementDataType"/>
<xsd:element name="true" type="nullElementDataType"/>
<xsd:element name="not" type="requiredScriptingElementType"/>
<xsd:element name="or" type="requiredScriptingElementType"/>
<xsd:element name="and" type="requiredScriptingElementType"/>
<xsd:element name="markup">
<xsd:complexType mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="markupGroup"/>
</xsd:choice>
<xsd:attribute name="mode" use="optional" default="text">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="text"/>
<xsd:enumeration value="html"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="static">
<xsd:complexType>
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--Data Types-->
<xsd:simpleType name="pricingOptions">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="order"/>
<xsd:enumeration value="shipping"/>
<xsd:enumeration value="discount"/>
<xsd:enumeration value="maintenance_agreement"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="nullElementDataType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
<xsd:maxLength value="0"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="starOrDecimal">
<xsd:union memberTypes="xsd:decimal">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="priceDataType">
<xsd:restriction base="xsd:decimal"/>
</xsd:simpleType>
<xsd:simpleType name="requiredVariableNameType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="requiredStringDataType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="100"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="requiredStringDataType255">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="255"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="requiredIntegerSimpleType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="1000000"/>
<xsd:fractionDigits value="0"/>
</xsd:restriction>
</xsd:simpleType>
<!--Script Modules-->
<xsd:element name="algorithm">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="functionType">
<xsd:attributeGroup ref="algorithmAttributes"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="reglist">
<xsd:complexType>
<xsd:attribute name="product" type="requiredStringDataType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="activate-soft.add-license">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="activate-soft.product-id" type="requiredSingleScriptingValueType" minOccurs="0"/>
<xsd:element name="activate-soft.custom-license" type="requiredSingleScriptingValueType"/>
</xsd:sequence>
<xsd:attribute name="username" type="requiredStringDataType" use="required"/>
<xsd:attribute name="password" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="activate-soft.generate">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="activate-soft.product-id" type="requiredSingleScriptingValueType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="username" type="requiredStringDataType" use="required"/>
<xsd:attribute name="password" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="redregistration.generate">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="redregistration.license-name" type="requiredSingleScriptingValueType"/>
<xsd:element name="redregistration.license-company" type="requiredSingleScriptingValueType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="key" type="requiredStringDataType" use="required"/>
<xsd:attribute name="rights" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="armadillo-generator">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="license-name" type="requiredSingleScriptingValueType"/>
<xsd:element name="license-hardware-key" type="requiredSingleScriptingValueType" minOccurs="0"/>
<xsd:element name="armadillo.data" type="requiredSingleScriptingValueType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="key" type="requiredStringDataType255" use="required"/>
<xsd:attribute name="signature_level" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1"/>
<xsd:maxInclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="use_quantity" type="xsd:boolean" use="optional" default="false"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="stardust-generator">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="license-name" type="requiredSingleScriptingValueType"/>
</xsd:sequence>
<xsd:attribute name="key" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="digital-lock.generate">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="digital-lock.license-name" type="requiredSingleScriptingValueType"/>
<xsd:element name="digital-lock.product-key" type="requiredSingleScriptingValueType"/>
</xsd:sequence>
<xsd:attribute name="appkey" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="8"/>
<xsd:maxLength value="8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="password" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="8"/>
<xsd:maxLength value="8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="softguard.generate">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="softguard.license-name" type="requiredSingleScriptingValueType"/>
<xsd:element name="softguard.system-id" type="requiredSingleScriptingValueType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="key" type="requiredStringDataType" use="required"/>
<xsd:attribute name="mask" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="list.use-value">
<xsd:complexType>
<xsd:choice>
<xsd:element name="list.value" type="requiredScriptingElementType"/>
</xsd:choice>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="list.contains">
<xsd:complexType>
<xsd:choice>
<xsd:element name="list.value" type="requiredSingleScriptingValueType"/>
</xsd:choice>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="list.next-value">
<xsd:complexType>
<xsd:choice>
<xsd:element name="list.value-count" type="requiredSingleScriptingValueType" minOccurs="0"/>
</xsd:choice>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="sharelock.generate">
<xsd:complexType>
<xsd:choice>
<xsd:element name="sharelock.license-name" type="requiredSingleScriptingValueType"/>
</xsd:choice>
<xsd:attribute name="key" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="sequence.next-value">
<xsd:complexType>
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="basket-count" type="nullElementDataType">
<xsd:annotation>
<xsd:documentation>Obtains the total number of items in the shopping cart for the current vendor.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="basket-contains">
<xsd:annotation>
<xsd:documentation>Returns a true/false value if the specified product is contained in the shopping cart.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="product" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="check-previous-orders">
<xsd:complexType>
<xsd:choice>
<xsd:element name="previous-order-id" type="requiredSingleScriptingValueType"/>
</xsd:choice>
<xsd:attribute name="product" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="vendor" type="requiredStringDataType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="check-asp-member">
<xsd:complexType>
<xsd:choice>
<xsd:element name="asp-member-id" type="requiredSingleScriptingValueType"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="check-european-country" type="requiredSingleScriptingValueType"/>
<xsd:element name="check">
<xsd:complexType>
<xsd:attributeGroup ref="variableAccessAttributes"/>
<xsd:attribute name="condition" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="contains"/>
<xsd:enumeration value="equal_to"/>
<xsd:enumeration value="not_equal_to"/>
<xsd:enumeration value="greater_than"/>
<xsd:enumeration value="less_than"/>
<xsd:enumeration value="length_equal_to"/>
<xsd:enumeration value="length_not_equal_to"/>
<xsd:enumeration value="length_greater_than"/>
<xsd:enumeration value="length_less_than"/>
<xsd:enumeration value="char_class"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="test" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="case_sensitive" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="yes"/>
<xsd:enumeration value="no"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="test_class" type="requiredVariableNameType" use="optional"/>
<xsd:attribute name="test_field" type="requiredVariableNameType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="remote.connect">
<xsd:annotation>
<xsd:documentation>This function calls a remote script by passing the name values pairs specified by the cgi-value elements.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="remote.cgi-value">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="requiredSingleScriptingValueType">
<xsd:attribute name="name" type="requiredStringDataType" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="method" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="get"/>
<xsd:enumeration value="post"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="url" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="255"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="username" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="password" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="agent" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="encode" use="optional" default="latin1">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="latin1"/>
<xsd:enumeration value="utf8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="decode" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="latin1"/>
<xsd:enumeration value="utf8"/>
<xsd:enumeration value="none"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--Delivery Methods-->
<xsd:element name="deliver-background">
<xsd:annotation>
<xsd:documentation>Execute a script in the background; not guaranteed to be immediate.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="script"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-standard-download">
<xsd:annotation>
<xsd:documentation>Deliver the download file assigned to the product.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="reference" type="requiredStringDataType" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-package">
<xsd:annotation>
<xsd:documentation>Deliver a predefined package.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="label" type="markupType" minOccurs="0"/>
</xsd:sequence>
<xsd:attributeGroup ref="namedComponentIDAttributes"/>
</xsd:complexType>
</xsd:element>
<!--
<xsd:element name="deliver-cdrom">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="layout">
<xsd:complexType>
<xsd:choice>
<xsd:element name="file" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="id" type="requiredStringDataType" use="required"/>
<xsd:attribute name="path" type="requiredStringDataType" use="optional"/>
<xsd:attribute name="type" use="optional" default="file">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="file"/>
<xsd:enumeration value="layout"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="type" use="optional" default="standard">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="standard"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
-->
<xsd:element name="deliver-standard-algorithm">
<xsd:annotation>
<xsd:documentation>Execute a predefined algorithm using the default license name as the first parameter.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="algorithmAttributes"/>
<xsd:attributeGroup ref="licenseAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-license">
<xsd:annotation>
<xsd:documentation>Deliver a license in a customized manner.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="generate-license">
<xsd:complexType>
<xsd:choice>
<xsd:element name="script" type="requiredScriptingElementType"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="generate-custom-license">
<xsd:complexType>
<xsd:choice>
<xsd:element name="script" type="requiredScriptingElementType"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:sequence>
<xsd:element name="generate-license-name" minOccurs="0">
<xsd:complexType>
<xsd:choice>
<xsd:element name="script" type="requiredScriptingElementType"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="generate-license-code">
<xsd:complexType>
<xsd:choice>
<xsd:element name="script">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="define-parameter"/>
<xsd:choice maxOccurs="unbounded">
<xsd:group ref="scriptLanguageGroup"/>
<xsd:element ref="remote.connect"/>
<xsd:element ref="call-function"/>
<xsd:element ref="list.next-value"/>
<xsd:element ref="list.use-value"/>
<!--<xsd:group ref="scriptModuleGroup"/>-->
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:choice>
<xsd:element name="license-format" type="markupType" minOccurs="0"/>
</xsd:sequence>
<xsd:attributeGroup ref="licenseAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-standard-list">
<xsd:annotation>
<xsd:documentation>Deliver a license from a predefined list of codes.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="use_quantity" type="xsd:boolean" use="optional"/>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
<xsd:attributeGroup ref="licenseAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-fixed-license">
<xsd:annotation>
<xsd:documentation>Deliver a fixed/static license code.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="code" type="requiredStringDataType" use="required"/>
<xsd:attributeGroup ref="licenseAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-email">
<xsd:annotation>
<xsd:documentation>Currently just one attachment per email is supported. Support for multiple attachments would be trivial to add.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice minOccurs="0">
<xsd:element name="attach-file">
<xsd:annotation>
<xsd:documentation>Mime type of attachment and attachment data are pulled from the specified file.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="attach">
<xsd:annotation>
<xsd:documentation>Mime type is assumed to be "text/plain" unless this default is overridden by another mime type in the "type" attribute. The attachment data is derived from the result of evaluating the script.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice>
<xsd:element ref="script"/>
</xsd:choice>
<xsd:attribute name="type" type="requiredStringDataType"/>
<xsd:attribute name="filename" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attributeGroup ref="componentIdentificationAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-custom">
<xsd:annotation>
<xsd:documentation>Display custom delivery text. By default this overrides the text of other delivery methods.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element ref="script" minOccurs="0"/>
<xsd:element name="pre-order-message" type="markupType" minOccurs="0"/>
<xsd:element name="message" type="markupType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="timeframe" type="requiredIntegerSimpleType" use="required"/>
<xsd:attribute name="separate" type="xsd:boolean" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deliver-cmps">
<xsd:annotation>
<xsd:documentation>Display custom delivery text.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="pre-order-message" type="markupType" minOccurs="0"/>
<xsd:element name="message" type="markupType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="timeframe" type="requiredIntegerSimpleType" use="required"/>
<xsd:attribute name="separate" type="xsd:boolean" use="optional"/>
</xsd:complexType>
</xsd:element>
<!--Fields and Display-->
<xsd:element name="section">
<xsd:annotation>
<xsd:documentation>Encapsulates a series of related groups.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="display" type="markupType" minOccurs="0"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="group"/>
<xsd:element ref="include-global-template"/>
<xsd:element ref="include-template"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="group">
<xsd:annotation>
<xsd:documentation>Defines one or more related fields as well as how those fields should be displayed and validated.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="display" type="markupType"/>
<xsd:element ref="validation" />
<xsd:element name="header" type="markupType" />
<xsd:element name="contents" type="contentsType"/>
<xsd:element name="footer" type="markupType" />
</xsd:choice>
<xsd:attribute name="type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="pricing"/>
<xsd:enumeration value="registration"/>
<xsd:enumeration value="delivery"/>
<xsd:enumeration value="product_price"/>
<xsd:enumeration value="subscription"/>
<xsd:enumeration value="quantity"/>
<xsd:enumeration value="product_shipping"/>
<xsd:enumeration value="miscellaneous"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="select">
<xsd:annotation>
<xsd:documentation>Allows a customer to choose from a series of options. Selects can participate in automatic pricing by assigning their options with values, and can also select from a series of products by using the special field name 'product_choice'.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="option">
<xsd:annotation>
<xsd:documentation>Represents one possible option within a 'select'. Options can be assigned a value and a optionally a price to associate with the value. If the select is of the special field name 'product_choice' then the value can be a product ID and the price can be an asterick. This will cause the selected product to be used and its price automatically displayed. The special 'product_choice' field should only be used with selects of type 'menu' or 'option'.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="display" type="markupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Defines how the option will be displayed independent of its value. If no display is specified, then the value of the option (and the price, if any) will be used for the display. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="delivery" type="deliveryType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Defines those delivery options that will be executed should this option be selected.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="value" type="requiredStringDataType" use="required"/>
<xsd:attribute name="price" type="starOrDecimal" use="optional">
</xsd:attribute>
<xsd:attributeGroup ref="customFieldPricingAttributes"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attributeGroup ref="customFieldAttributes"/>
<xsd:attribute name="pricing" type="pricingOptions" use="optional"/>
<xsd:attribute name="type" use="required">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="menu"/>
<xsd:enumeration value="option"/>
<xsd:enumeration value="checkbox"/>
<xsd:enumeration value="list"/>
<xsd:enumeration value="multilist"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="textarea">
<xsd:annotation>
<xsd:documentation>Multiline textbox</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="customFieldAttributes"/>
<xsd:attribute name="rows" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredIntegerSimpleType">
<xsd:minInclusive value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="columns" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredIntegerSimpleType">
<xsd:minInclusive value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="textbox">
<xsd:annotation>
<xsd:documentation>Creates a textbox for entering arbitrary information. If its pricing options are used, then the numeric value of the textbox will be multiplied by the price specified - i.e. it will behave as a simple quantity box.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="customFieldAttributes"/>
<xsd:attribute name="price" type="priceDataType" use="optional"/>
<xsd:attribute name="pricing" type="pricingOptions" use="optional"/>
<xsd:attribute name="size" type="requiredIntegerSimpleType" use="optional"/>
<xsd:attribute name="maxlength" type="requiredIntegerSimpleType" use="optional"/>
<xsd:attribute name="mask" type="xsd:boolean" use="optional" default="false"/>
<xsd:attributeGroup ref="customFieldPricingAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="table">
<xsd:annotation>
<xsd:documentation>Formats information as a series of rows and columns.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="row">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="column">
<xsd:annotation>
<xsd:documentation>Ideally this should be of contentType, however derive by extension does not allow you to also mixed=true. Therefore we have to duplicate contentType from within column.</xsd:documentation>
</xsd:annotation>
<xsd:complexType mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="markupGroup"/>
<xsd:group ref="customDisplayElements"/>
</xsd:choice>
<xsd:attribute name="span" type="requiredIntegerSimpleType" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="quantity-pricing">
<xsd:annotation>
<xsd:documentation>Eases the creation of a pricing solution which is determined by the quantity ordered.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="unit-singular" type="markupType" minOccurs="0"/>
<xsd:element name="unit-plural" type="markupType"/>
<xsd:element name="level" minOccurs="2" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:group ref="markupGroup" minOccurs="0" maxOccurs="unbounded"/>
<xsd:attribute name="start" type="requiredIntegerSimpleType" use="required"/>
<xsd:attribute name="price" type="priceDataType" use="optional"/>
<xsd:attributeGroup ref="customFieldPricingAttributes"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="class" use="optional">
<xsd:simpleType>
<xsd:restriction base="requiredStringDataType">
<xsd:enumeration value="custom"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="field" type="requiredStringDataType" use="required"/>
<xsd:attribute name="pricing" type="pricingOptions" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="validationType">
<xsd:sequence>
<xsd:element name="error-message" type="markupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>May be displayed if the validation returns true.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:choice>
<xsd:annotation>
<xsd:documentation>This allows use of either validation macros, or a script, but not both.</xsd:documentation>
</xsd:annotation>
<xsd:element ref="script"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="require-value">
<xsd:annotation>
<xsd:documentation>Requires a specified field to contain at least some data.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="field" type="requiredStringDataType" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="validation" type="validationType">
<xsd:annotation>
<xsd:documentation>Validates the fields and data within a group. The contained script should evaluate to TRUE to indicate that the data or fields are invalid. FALSE indicates that the data and fields contain CORRECT data. It is possible to have multiple validation nodes within a single group for the purpose of providing additional messages when one message might be too generic.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment