Included is an attempt at formalizing the definition of a Domain.xml
file - a Domain.xsd file. To use it one has to add the following
attribute to your Domain.xml 'slide' element:

xmlns="http://www.apache.org/slide";

as in:

<?xml version="1.0"?>
<slide
    xmlns="http://www.apache.org/slide";
    logger="org.apache.slide.util.logger.SimpleLogger"
    logger-level="6" default="slide">
....
</slide>

and then use some xml validating parser (e.g., xerces).
One could have added uniqueness contraints, but I will leave that
to another day.

please give me any corrections.

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

    <xsd:element name="slide" type="slide:SlideType"/>

    <xsd:complexType name="SlideType">
        <xsd:sequence>
            <xsd:element name="namespace" maxOccurs="unbounded"
                        type="slide:NamespaceType"/>
            <xsd:element name="parameter" 
                        minOccurs="0" maxOccurs="unbounded"
                        type="slide:ParameterType"/>
        </xsd:sequence>
        <xsd:attribute name="default" type="xsd:string" 
                        use="optional" default="slide"/>
        <xsd:attribute name="logger" type="xsd:string" 
                        use="optional"
                        default="org.apache.slide.util.logger.SimpleLogger"/>
        <xsd:attribute name="logger-level" type="slide:LogLevel" 
                        use="optional" default="6"/>
    </xsd:complexType>

    <xsd:complexType name="NamespaceType" >
        <xsd:sequence>
            <xsd:element name="definition" type="slide:DefinitionType"/>
            <xsd:element name="configuration" type="slide:ConfiguationType"/>
            <xsd:element name="data" type="slide:DataType"/>
            <xsd:element name="services" type="slide:ServicesType"
                            minOccurs="0" />
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="logger" type="xsd:string" 
                        use="optional"
                        default="org.apache.slide.util.logger.SimpleLogger"/>
        <xsd:attribute name="logger-level" type="slide:LogLevel" 
                        use="optional" default="6"/>
    </xsd:complexType>

    <xsd:complexType name="DefinitionType" >
        <xsd:sequence>
            <xsd:element name="store" 
                        maxOccurs="unbounded"
                        type="slide:StoreType"/>

            <xsd:element name="scope" 
                        maxOccurs="unbounded"
                        type="slide:ScopeType"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="StoreType" >
        <xsd:choice maxOccurs="unbounded">
            <xsd:element name="parameter" minOccurs="0" maxOccurs="unbounded"
                    type="slide:ParameterType"/>
            <!-- child stores -->
            <xsd:element name="nodestore" type="slide:NodeStoreType"/>
            <xsd:element name="securitystore" type="slide:SecurityStoreType"/>
            <xsd:element name="lockstore" type="slide:LockStoreType"/>
            <xsd:element name="revisiondescriptorsstore" 
                         type="slide:RevisionDescriptorsStoreType"/>
            <xsd:element name="revisiondescriptorstore" 
                        type="slide:RevisionDescriptorStoreType"/>
            <xsd:element name="contentstore" type="slide:ContentStoreType"/>
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="classname" type="slide:ClassName" use="optional" />
    </xsd:complexType>

    <xsd:complexType name="BaseNodeStoreType" >
        <!-- either classname attribute and parameters or reference child -->
        <xsd:sequence>
            <xsd:element name="reference" 
                        minOccurs="0"
                        type="slide:ReferenceType"/>
            <xsd:element name="parameter" 
                        minOccurs="0" maxOccurs="unbounded"
                        type="slide:ParameterType"/>
        </xsd:sequence>
        <xsd:attribute name="classname" type="slide:ClassName" use="optional" />
    </xsd:complexType>

    <xsd:complexType name="NodeStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="SecurityStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="LockStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="RevisionDescriptorStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="RevisionDescriptorsStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="ContentStoreType" >
        <xsd:complexContent>
            <xsd:extension base="slide:BaseNodeStoreType"/>
        </xsd:complexContent>
    </xsd:complexType>


    <xsd:complexType name="ReferenceType" >
        <xsd:attribute name="store" type="xsd:string" use="required" />
    </xsd:complexType>

    <xsd:complexType name="ConfiguationType" >
        <xsd:choice maxOccurs="unbounded">
            <xsd:element name="default-action" type="slide:DefaultActionType"/>

            <xsd:element name="read-object" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="create-object" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="remove-object" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="grant-permission" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="revoke-permission" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="read-permissions" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="lock-object" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="kill-lock" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="read-locks" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="read-revision-metadata" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="create-revision-metadata" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="modify-revision-metadata" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="remove-revision-metadata" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="read-revision-content" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="create-revision-content" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="modify-revision-content" minOccurs="0"
                            type="slide:ActionType"/>
            <xsd:element name="remove-revision-content" minOccurs="0"
                            type="slide:ActionType"/>

            <xsd:element name="userspath" minOccurs="0"
                            type="slide:PathType"/>
            <xsd:element name="guestpath" minOccurs="0"
                            type="slide:PathType"/>
            <xsd:element name="filespath" minOccurs="0"
                            type="slide:PathType"/>

            <xsd:element name="parameter" maxOccurs="unbounded"
                        type="slide:ParameterType"/>
            <xsd:element name="role" maxOccurs="unbounded"
                        type="slide:RoleType"/>

            <xsd:element name="auto-create-users" minOccurs="0"
                            type="slide:BooleanType"/>
            <xsd:element name="auto-create-users-role" minOccurs="0"
                            type="slide:BooleanType"/>

            <xsd:element name="default-property" maxOccurs="unbounded"
                        type="slide:DefaultPropertyType"/>

            <xsd:element name="content-interceptor" 
                            minOccurs="0" maxOccurs="unbounded"
                            type="slide:ContentInterceptorType"/>
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="RoleType" >
        <xsd:simpleContent >
            <xsd:extension base="xsd:string">
                <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
    <xsd:complexType name="DefaultPropertyType" >
        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="namespace" type="xsd:string" use="required" />
        <xsd:attribute name="role" type="xsd:string" use="required" />
        <xsd:attribute name="value" type="xsd:string" use="optional" />
    </xsd:complexType>

    <xsd:complexType name="DataType" >
        <xsd:sequence>
            <xsd:element name="objectnode" type="slide:ObjectNodeType"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ObjectNodeType" >
        <xsd:sequence>
            <xsd:element name="permission" 
                            minOccurs="0" maxOccurs="unbounded"
                            type="slide:PermissionType"/>
            <xsd:element name="revision" 
                            minOccurs="0"
                            type="slide:RevisionType"/>
            <xsd:element name="objectnode" 
                            minOccurs="0" maxOccurs="unbounded"
                            type="slide:ObjectNodeType"/>
        </xsd:sequence>
        <xsd:attribute name="classname" type="slide:ClassName" use="required" />
        <xsd:attribute name="uri" type="xsd:string" use="required" />
        <xsd:attribute name="linkedUri" type="xsd:string" use="optional" />
    </xsd:complexType>

    <xsd:complexType name="PermissionType" >
        <xsd:attribute name="subject" type="xsd:string" use="required" />
        <xsd:attribute name="action" type="slide:AbsoluteDirectory" 
                                use="required" />
        <xsd:attribute name="inheritable" type="xsd:boolean" use="optional" />
        <xsd:attribute name="negative" type="xsd:boolean" use="optional" />
    </xsd:complexType>

    <xsd:complexType name="RevisionType" >
        <xsd:sequence>
            <xsd:element name="property" maxOccurs="unbounded"
                        type="slide:PropertyType"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="PropertyType" >
        <xsd:simpleContent >
            <xsd:extension base="xsd:string">
                <xsd:attribute name="namespace" type="xsd:string" 
                                    use="required" />
                <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="DefaultActionType" >
        <xsd:simpleContent >
            <xsd:extension base="slide:AbsoluteDirectory"/>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="ActionType" >
        <xsd:simpleContent >
            <xsd:extension base="slide:AbsoluteDirectory"/>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="PathType" >
        <xsd:simpleContent >
            <xsd:extension base="slide:AbsoluteDirectory"/>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="BooleanType" >
        <xsd:simpleContent >
            <xsd:extension base="xsd:boolean">
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="ContentInterceptorType" >
        <xsd:sequence>
            <xsd:element name="parameter" maxOccurs="unbounded"
                        type="slide:ParameterType"/>
        </xsd:sequence>
        <xsd:attribute name="class" type="xsd:string" use="required" />
    </xsd:complexType>

    <xsd:complexType name="ScopeType" >
        <xsd:attribute name="match" type="xsd:string" use="required" />
        <xsd:attribute name="store" type="xsd:string" use="required" />
    </xsd:complexType>

    <xsd:complexType name="ServicesType">
        <xsd:sequence>
            <xsd:element name="parameter" maxOccurs="unbounded"
                        type="slide:ParameterType"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required" />
        <xsd:attribute name="classname" type="slide:ClassName" use="required" />
    </xsd:complexType>

    <xsd:complexType name="ParameterType" >
        <xsd:simpleContent >
            <xsd:extension base="xsd:string">
                <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>


    <xsd:simpleType name="LogLevel">
        <xsd:restriction base="xsd:nonNegativeInteger">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="7"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ClassName">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[a-zA-Z]\w*(\.[a-zA-Z]\w*)*"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="AbsoluteDirectory">
        <xsd:restriction base="xsd:string">
            <!-- optional value -->
            <xsd:pattern value="(((/)*[ a-zA-Z0-9_\-]+)+(/)*)?"/>
        </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to