<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bancaditalia.it/bolina/common/vo/cube" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:bdi="http://www.bancaditalia.it/bolina/common/vo/cube" 
           elementFormDefault="qualified">
    
    <xs:complexType name="ObservationType">
    	<xs:sequence>
    		<xs:element name="dim" type="bdi:DimensionType" minOccurs="1" maxOccurs="unbounded"/>
    	</xs:sequence>
    	<xs:attribute name="id" type="xs:string" use="optional"/>
    	<xs:attribute name="modified" type="xs:boolean" use="optional"/>
    	<xs:attribute name="error" type="xs:boolean" use="optional"/>
    	<xs:attribute name="errorCode" type="xs:string" use="optional"/>
    	<xs:attribute name="rowSelected" type="xs:boolean"/>
    </xs:complexType>

    <xs:complexType name="DimensionType">
    	<xs:attribute name="name" type="xs:string" use="required"/>
    	<xs:attribute name="value" type="xs:string" use="required"/>
    	<xs:attribute name="descr" type="xs:string" use="optional"/>
    	<xs:attribute name="errCode" type="xs:int" use="optional"/>
    	<xs:attribute name="errDescr" type="xs:string" use="optional"/>
    </xs:complexType>
	
    <xs:complexType name="SegmentType">
        <xs:sequence>
        	<xs:element name="cube" type="bdi:CubeType" maxOccurs="unbounded" minOccurs="1"/>
    	</xs:sequence>
    	<xs:attribute name="id">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="OBSERVATION"/>
    				<xs:enumeration value="DELETE"/>
    				<xs:enumeration value="INSERT"/>
    				<xs:enumeration value="PARTIAL_KEY_DELETE"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:attribute>
    </xs:complexType>
	
    <xs:complexType name="CubeType">
    	<xs:sequence>
    		<xs:annotation>
    			<xs:documentation>
    				In dims and obs elements some dimension name could
    				be equal!
    			</xs:documentation>
    			<xs:documentation>
    				Remember to verify the uniqueness when you parse a
    				document compliant with this schema!
    			</xs:documentation>
    		</xs:annotation>    		<xs:element name="dim" type="bdi:DimensionType" minOccurs="0" maxOccurs="unbounded"/>
    		<xs:element name="obs" type="bdi:ObservationType" minOccurs="1" maxOccurs="unbounded"/>
    		
    	</xs:sequence>
    	
    	<xs:attribute name="id" type="xs:string"/>
    	<xs:attribute name="lastObsId" type="xs:string" use="optional"/>
    	
    </xs:complexType>

    <xs:element name="cubes" type="bdi:CubeListType"/>

    <xs:complexType name="CubeListType">
    	<xs:sequence>
    		<xs:element name="dim" type="bdi:DimensionType" minOccurs="0" maxOccurs="unbounded"/>
    		<xs:element name="cube" type="bdi:CubeType" minOccurs="1" maxOccurs="unbounded"/>
    	</xs:sequence>
    </xs:complexType>

    <xs:element name="cube" type="bdi:CubeType"/>
    <xs:element name="obs" type="bdi:ObservationType"/>
    
</xs:schema>
