Web Service Data Types XML Schema

From AlfrescoWiki

Jump to: navigation, search

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:alf="http://www.alfresco.org/cms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.alfresco.org/cms" version="0.1">
    <xsd:annotation>
    	<xsd:documentation>Alfresco Web Services for Content Management. Type Definitions - Draft.</xsd:documentation>
    </xsd:annotation>
    
	<!-- -->    
	<!-- Identifier Definitions -->
	<!-- -->

	<xsd:simpleType name="Name">
        <xsd:annotation>
        	<xsd:documentation>TODO: Define constraints</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
 			<xsd:minLength value="1"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<xsd:simpleType name="UUID">
		<xsd:restriction base="xsd:string">
		    <xsd:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="Path">
        <xsd:annotation>
        	<xsd:documentation>TODO: Define constraints</xsd:documentation>
        </xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:minLength value="1"/>
		</xsd:restriction>
	</xsd:simpleType>

    <xsd:simpleType name="StoreEnum">
    	<xsd:restriction base="xsd:string">
    		<xsd:enumeration value="workspace"/>
    		<xsd:enumeration value="version"/>
    		<xsd:enumeration value="search"/>
    		<xsd:enumeration value="http"/>
    	</xsd:restriction>
    </xsd:simpleType>
    
    <xsd:complexType name="Store">
    	<xsd:sequence>
    		<xsd:element name="scheme" type="alf:StoreEnum"/>
    		<xsd:element name="address">
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:string">
    					<xsd:minLength value="1"/>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:element>
    	</xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Reference">
    	<xsd:sequence>
    		<xsd:element name="store" type="alf:Store"/>
    		<xsd:element maxOccurs="1" minOccurs="0" name="uuid" type="alf:UUID"/>
    		<xsd:element default="/" maxOccurs="1" minOccurs="0" name="path" type="alf:Path"/>
    	</xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ParentReference">
    	<xsd:complexContent>
    		<xsd:extension base="alf:Reference">
    			<xsd:sequence>
    				<xsd:element maxOccurs="1" minOccurs="0" name="childAssociation" type="alf:Name"/>
    				<xsd:element maxOccurs="1" minOccurs="0" name="childName" type="alf:Name"/>
    			</xsd:sequence>
    		</xsd:extension>
    	</xsd:complexContent>
    </xsd:complexType>

	<!-- -->
	<!-- Meta Data Definitions -->
	<!-- -->
	
	<xsd:complexType name="ClassDefinition">
		<xsd:sequence>
			<xsd:element name="name" type="alf:Name"></xsd:element>
			<xsd:group ref="alf:TextualDescription"></xsd:group>
			<xsd:element name="superClass" type="alf:Name" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="isAspect" type="xsd:boolean"></xsd:element>
			<xsd:element name="properties" type="alf:PropertyDefinition"></xsd:element>
			<xsd:element name="associations" type="alf:AssociationDefinition"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="ValueDefinition">
		<xsd:sequence>
			<xsd:element name="name" type="alf:Name"></xsd:element>
			<xsd:group ref="alf:TextualDescription"></xsd:group>
			<xsd:element name="dataType" type="xsd:anyType"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="PropertyDefinition">
		<xsd:complexContent>
			<xsd:extension base="alf:ValueDefinition">
				<xsd:sequence>
					<xsd:element name="mandatory" type="xsd:boolean" default="false"></xsd:element>
					<xsd:element name="readOnly" type="xsd:boolean" default="false"></xsd:element>
					<xsd:element name="defaultValue" maxOccurs="1" minOccurs="0" type="xsd:anyType"></xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="AssociationDefinition">
		<xsd:sequence>
			<xsd:element name="name" type="alf:Name"></xsd:element>
			<xsd:group ref="alf:TextualDescription"></xsd:group>
			<xsd:element name="isChild" type="xsd:boolean" default="true"></xsd:element>
			<xsd:element name="sourceRole" type="alf:RoleDefinition" maxOccurs="1" minOccurs="0"></xsd:element>			
			<xsd:element name="targetRole" type="alf:RoleDefinition" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="targetClass" type="alf:Name"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="RoleDefinition">
		<xsd:sequence>
			<xsd:element name="name" type="alf:Name" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="cardinality" type="alf:Cardinality" default="*" maxOccurs="1" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="NodeDefinition">
		<xsd:sequence>
			<xsd:element name="type" type="alf:ClassDefinition"></xsd:element>
			<xsd:element name="aspect" type="alf:ClassDefinition" maxOccurs="unbounded" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:group name="TextualDescription">
		<xsd:sequence>
			<xsd:element name="title" type="xsd:string" maxOccurs="1" minOccurs="0"/>
			<xsd:element name="description" type="xsd:string" maxOccurs="1" minOccurs="0"/>
		</xsd:sequence>
	</xsd:group>

	<xsd:simpleType name="Cardinality">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="0..1"></xsd:enumeration>
			<xsd:enumeration value="1"></xsd:enumeration>
			<xsd:enumeration value="*"></xsd:enumeration>
			<xsd:enumeration value="1..*"></xsd:enumeration>
		</xsd:restriction>
	</xsd:simpleType>

	<!-- -->	
	<!-- Generic Content Definitions -->
	<!-- -->
	
    <xsd:complexType name="Node">
    	<xsd:sequence>
    		<xsd:element name="reference" type="alf:Reference"></xsd:element>
    		<xsd:element name="type" type="alf:Name">
    			<xsd:annotation>
    				<xsd:documentation>TODO: Change type to NodeDescription</xsd:documentation>
    			</xsd:annotation>
    		</xsd:element>
    		<xsd:element name="properties" type="alf:Property" minOccurs="0" maxOccurs="unbounded"></xsd:element>
    	</xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Content">
    	<xsd:complexContent>
    		<xsd:extension base="alf:Node">
    			<xsd:sequence>
    				<xsd:element name="format" type="alf:ContentFormat"></xsd:element>
    				<xsd:element name="length" type="xsd:long"></xsd:element>
    			</xsd:sequence>
    		</xsd:extension>
    	</xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="ContentFormat">
    	<xsd:sequence>
    		<xsd:element name="mimetype">
    			<xsd:annotation>
    				<xsd:documentation>
    					TODO: MinOccurs = 0?
    					TODO: Define Constraints
    				</xsd:documentation>
    			</xsd:annotation>
    			<xsd:simpleType>
			        <xsd:restriction base="xsd:string">
			 			<xsd:minLength value="1"/>
					</xsd:restriction>
				</xsd:simpleType>
    		</xsd:element>
    		<xsd:element name="encoding">
    			<xsd:annotation>
    				<xsd:documentation>
    					TODO: MinOccurs = 0?
    					TODO: Define Constraints
    				</xsd:documentation>
    			</xsd:annotation>
    			<xsd:simpleType>
			        <xsd:restriction base="xsd:string">
			 			<xsd:minLength value="1"/>
					</xsd:restriction>
				</xsd:simpleType>
    		</xsd:element>
    	</xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Property">
    	<xsd:sequence>
    		<xsd:element name="name" type="alf:Name"></xsd:element>
    		<xsd:element name="value" type="xsd:anyType" nillable="true"></xsd:element>
    	</xsd:sequence>
    </xsd:complexType>

	<!-- -->
	<!-- Query Definitions -->
	<!-- -->

    <xsd:simpleType name="QueryLanguageEnum">
    	<xsd:restriction base="xsd:string">
    		<xsd:enumeration value="lucene"/>
    		<xsd:enumeration value="xpath"/>
    		<xsd:enumeration value="cql"/>
    	</xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="Query">
    	<xsd:sequence>
    		<xsd:element name="language" type="alf:QueryLanguageEnum"/>
    		<xsd:element name="statement" type="xsd:string"/>
    	</xsd:sequence>
    </xsd:complexType>
    
	<xsd:complexType name="ResultSet">
		<xsd:sequence>
			<xsd:element name="row" type="alf:ResultSetRow" maxOccurs="unbounded" minOccurs="0"></xsd:element>
			<xsd:element name="size" type="xsd:long"></xsd:element>
			<xsd:element name="metaData" type="alf:ResultSetMetaData" maxOccurs="1" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="ResultSetRow">
		<xsd:sequence>
			<xsd:element name="rowIndex" type="xsd:long"></xsd:element>
			<xsd:element name="column" type="alf:Property" maxOccurs="unbounded" minOccurs="0"/>
			<xsd:element name="score" type="xsd:float" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="node" maxOccurs="1" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="id" type="alf:UUID"></xsd:element>
						<xsd:element name="type" type="alf:Name"></xsd:element>
						<xsd:element name="aspect" type="alf:Name" maxOccurs="unbounded" minOccurs="0"></xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="ResultSetMetaData">
		<xsd:sequence>
			<xsd:element name="value" type="alf:ValueDefinition" maxOccurs="unbounded" minOccurs="0"></xsd:element>
			<xsd:element name="class" type="alf:ClassDefinition" maxOccurs="unbounded" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="Predicate">
		<xsd:choice>
			<xsd:element name="node" type="alf:Reference"
				maxOccurs="unbounded" minOccurs="1">
			</xsd:element>
			<xsd:sequence>
				<xsd:element name="store" type="xsd:string"></xsd:element>
				<xsd:element name="query" type="alf:Query">
				</xsd:element>
			</xsd:sequence>
		</xsd:choice>
	</xsd:complexType>

	<!-- -->
	<!-- Version Definitions -->
	<!-- -->
	
	<xsd:complexType name="Version">
		<xsd:sequence>
			<xsd:element name="id" type="alf:Reference"></xsd:element>
			<xsd:element name="created" type="xsd:dateTime" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="creator" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="label" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element>
			<xsd:element name="major" type="xsd:boolean" default="true"></xsd:element>
			<xsd:element name="commentary" type="alf:Property" maxOccurs="unbounded" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="VersionHistory">
		<xsd:sequence>
			<xsd:element name="versions" type="alf:Version" maxOccurs="unbounded" minOccurs="0"></xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<!-- -->
	<!-- Classification Definitions -->
	<!-- -->
	
	<xsd:complexType name="Category">
		<xsd:sequence>
			<xsd:element name="id" type="alf:Reference"></xsd:element>
			<xsd:group ref="alf:TextualDescription"></xsd:group>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="Classification">
		<xsd:complexContent>
			<xsd:extension base="alf:Category">
				<xsd:sequence>
					<xsd:element name="rootCategory" type="alf:Category"></xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

</xsd:schema>