SPML Object Model Overview

The object model consists of two major classes: the ProvisioningTarget which represents a provisionable resource, and the ProvisioningSubscription which holds the information related to the provisioning of the resource.  The following diagram illustrates the relationship between these two entities:

Instances of the ProvisioningSubscription class may associated with at most a single target but allow the construction of Composite structures.  Each ProvisioningTarget has a unique identifier (within a domain) and, potentially, a schema definition.  The creation of a ProvisioningSubscription will generally involve the generation of a set of parameters complying with the target schema.  These parameters are maintaind by the subscription instance.  ProvisioningSubscription instances may also maintain a set of state changes that represent the lifecycle of the subscription.

Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
        xmlns:spml="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
        xmlns:xml="http://www.w3.org/XML/1998/namespace"
        xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>

    <complexType name="ProvisioningMessage">
        <simpleContent>
            <extension base="string">
                <attribute ref="xml:lang" use="optional"/>
            </extension>
        </simpleContent>
    </complexType>

    <complexType name="ProvisioningIdentifier">
        <annotation>
            <documentation>Generic identifier for all provisioning related objects.</documentation>
        </annotation>
        <sequence>
            <any minOccurs="0" maxOccurs="unbounded">
                <annotation>
                    <documentation>Any additional user data</documentation>
                </annotation>
            </any>
        </sequence>
        <attribute name="name" type="string" use="required"/>
    </complexType>

    <complexType name="ProvisioningTargetSchema">
        <sequence>
            <any namespace="##other" id="targetSchema" minOccurs="1" maxOccurs="1">
                <annotation>
                    <documentation>The schema for a target.</documentation>
                </annotation>
            </any>
        </sequence>
        <attribute name="element" type="QName" use="required"/>
    </complexType>

    <element name="ProvisioningTarget" type="spml:ProvisioningTargetType"/>
    <complexType name="ProvisioningTargetType">
        <annotation>
            <documentation>A ProvisioningTarget represents a resource instance that may be provisioned</documentation>
        </annotation>
        <sequence>
            <element name="identifier" type="spml:ProvisioningIdentifier" minOccurs="1" maxOccurs="1"/>
            <element name="description" type="spml:ProvisioningMessage" minOccurs="0" maxOccurs="unbounded"/>
            <element name="schema" type="spml:ProvisioningTargetSchema" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="name" type="string" use="optional"/>
    </complexType>

    <element name="ProvisioningTargets" type="spml:ProvisioningTargetsType"/>
    <complexType name="ProvisioningTargetsType">
        <annotation>
            <documentation>A set of ProvisioningTarget instances.</documentation>
        </annotation>
        <sequence>
            <element ref="spml:ProvisioningTarget" maxOccurs="unbounded"/>
        </sequence>
    </complexType>

    <element name="ProvisioningSubscriptionState" type="spml:ProvisioningSubscriptionStateType"/>
    <simpleType name="ProvisioningSubscriptionStateType">
        <restriction base="string">
            <enumeration value="suspended"/>
            <enumeration value="active"/>
            <enumeration value="locked"/>
            <enumeration value="terminated"/>
            <enumeration value="pending"/>
            <enumeration value="created"/>
            <enumeration value="requested"/>
            <enumeration value="unavailable"/>
        </restriction>
    </simpleType>

    <element name="ProvisioningSubscriptionEvent" type="spml:ProvisioningSubscriptionEventType"/>
    <complexType name="ProvisioningSubscriptionEventType">
        <annotation>
            <documentation>The lifecycle represents a potentially timed state change in a subscription.</documentation>
        </annotation>
        <sequence>
            <element name="state" type="spml:ProvisioningSubscriptionStateType" minOccurs="1" maxOccurs="1"/>
            <element name="date" type="dateTime" minOccurs="0" maxOccurs="1"/>
            <element name="description" type="spml:ProvisioningMessage" minOccurs="0" maxOccurs="unbounded"/>
            <element name="actor" type="spml:ProvisioningIdentifier" minOccurs="0" maxOccurs="1"/>
            <element name="reason" type="spml:ProvisioningServiceStatusType" minOccurs="0" maxOccurs="1"/>
        </sequence>
    </complexType>

    <complexType name="ProvisioningSubscriptionEventsType">
        <annotation>
            <documentation>A set of ProvisioningSubscriptionEvent instances.</documentation>
        </annotation>
        <sequence>
            <element ref="spml:ProvisioningSubscriptionEvent" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>

    <complexType name="ProvisioningServiceParameters">
        <sequence>
            <any namespace="##other" id="serviceParameters" minOccurs="1" maxOccurs="1">
                <annotation>
                    <documentation>Container for generic parameters used for a subscription or return values.</documentation>
                </annotation>
            </any>
        </sequence>
    </complexType>

    <element name="ProvisioningServiceSubscription" type="spml:ProvisioningServiceSubscriptionType"/>
    <complexType name="ProvisioningServiceSubscriptionType">
        <annotation>
            <documentation>A subscription holds the state of a provisioned target or request.</documentation>
        </annotation>
        <sequence>
            <element name="identifier" type="spml:ProvisioningIdentifier" minOccurs="1" maxOccurs="1"/>
            <element name="target" type="spml:ProvisioningTargetType" minOccurs="0" maxOccurs="1"/>
            <element name="state" type="spml:ProvisioningSubscriptionStateType" minOccurs="0" maxOccurs="1"/>
            <element name="lifecycle" type="spml:ProvisioningSubscriptionEventsType" minOccurs="0" maxOccurs="1"/>
            <element name="children" type="spml:ProvisioningServiceSubscriptionsType" minOccurs="0" maxOccurs="1"/>
            <element name="parameters" type="spml:ProvisioningServiceParameters" minOccurs="0" maxOccurs="1"/>
        </sequence>
    </complexType>

    <element name="ProvisioningServiceSubscriptions" type="spml:ProvisioningServiceSubscriptionsType"/>
    <complexType name="ProvisioningServiceSubscriptionsType">
        <annotation>
            <documentation>A set of ProvisioningServiceSubscription instances.</documentation>
        </annotation>
        <sequence>
            <element ref="spml:ProvisioningServiceSubscription" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>

    <simpleType name="ProvisioningServiceStatusCode">
        <restriction base="string">
            <enumeration value="success"/>
            <enumeration value="inProcess"/>
            <enumeration value="badRequest"/>
            <enumeration value="busy"/>
            <enumeration value="unavailable"/>
            <enumeration value="unsupportedOperation"/>
            <enumeration value="notAuthorized"/>
            <enumeration value="schemaViolation"/>
            <enumeration value="unsupportedSchema"/>
            <enumeration value="noSuchTarget"/>
            <enumeration value="targetUnavailable"/>
            <enumeration value="targetReportedError"/>
        </restriction>
    </simpleType>

    <element name="ProvisioningServiceStatus" type="spml:ProvisioningServiceStatusType"/>
    <complexType name="ProvisioningServiceStatusType">
        <annotation>
            <documentation>The status returned as part of a provisioning operation.</documentation>
        </annotation>
        <sequence>
            <element name="code" type="spml:ProvisioningServiceStatusCode" minOccurs="1" maxOccurs="1"/>
            <element name="message" type="spml:ProvisioningMessage" minOccurs="0" maxOccurs="unbounded"/>
            <element name="data" type="spml:ProvisioningServiceParameters" minOccurs="0" maxOccurs="1"/>
        </sequence>
    </complexType>
</schema>