<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bankitalia.it/bolina/remark" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bdi="http://www.bankitalia.it/bolina/remark">

    <xs:complexType name="remark">
        <xs:annotation>
        	<xs:documentation>
        		Un Remark può contenere una istanza di RemarkItem oppure
        		una RemarkList (Remarks di attendibilità/deterministici)
        	</xs:documentation>
        </xs:annotation>
        <xs:sequence>
        	<xs:element name="remarkItem" type="bdi:remarkItem"
        		minOccurs="0">
        	</xs:element>
        	<xs:element name="remarkList" type="bdi:remarkList" minOccurs="0"></xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:string" use="required"></xs:attribute>
    	<xs:attribute name="type" type="xs:string" use="required"></xs:attribute>
    </xs:complexType>
    
    <xs:complexType name="remarkItem">
    	<xs:annotation>
    		<xs:documentation>
    			Un RemarkItem può contenere anche le descrizioni
    			dell'Object e/o del Remark stesso
    		</xs:documentation>
    	</xs:annotation>
    	<xs:sequence>
    		<xs:element name="dimensions" type="bdi:dimension"
    			minOccurs="0" maxOccurs="unbounded">
    		</xs:element>
    		<xs:element name="isAlreadySent"
    			type="bdi:isAlreadySentType" maxOccurs="1" minOccurs="0">
    		</xs:element>
    	</xs:sequence>
    	<xs:attribute name="objectType" type="xs:string"
    		use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				DA VALORIZZARE SEMPRE tranne nel caso in cui
    				costituisca il contenitore di aggregati per Remarks
    				di tipo DETERMINISTIC (in questo caso deve essere
    				valorizzato solo nel RemarkItem padre con Cube)
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="objectId" type="xs:string" use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				DA VALORIZZARE SEMPRE tranne nel caso in cui
    				costituisca il contenitore di aggregati per Remarks
    				di tipo DETERMINISTIC (in questo caso deve essere
    				valorizzato solo nel RemarkItem padre con
    				l'identificativo del Cube risultato)
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="objectDescription" type="xs:string"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="remarkDescription" type="xs:string"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="seriousness" type="xs:integer"
    		use="optional">
    		<xs:annotation>
    			<xs:documentation>Gravita' del Remark</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="uniqueId" type="xs:string" use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				Identificativo univoco del Remark (all'interno della
    				ProcessUnit)
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="aggregateProgr" type="xs:integer"
    		use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				Progressivo da utilizzare SOLO per gli aggregati dei
    				remark deterministici
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="confirmAllowed" type="xs:boolean"
    		use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				Confermabilità del remark
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="expectedValue" type="xs:string"
    		use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				Valido solo per i remarks di tipo 'CONVERSION'
    			</xs:documentation>
    		</xs:annotation>
    	</xs:attribute>
    	<xs:attribute name="foundValue" type="xs:string" use="optional">
    		<xs:annotation>
    			<xs:documentation>
    				Valido solo per i remarks di tipo 'CONVERSION'
    			</xs:documentation>
    		</xs:annotation></xs:attribute>
    </xs:complexType>

    <xs:complexType name="dimension">
    	<xs:attribute name="name" type="xs:string"></xs:attribute>
    	<xs:attribute name="numericValue" type="xs:integer"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="remarkId" type="bdi:remarkId"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="alphabeticValue" type="xs:string"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="description" type="xs:string"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="remarkDescription" type="xs:string"
    		use="optional">
    	</xs:attribute>
    	<xs:attribute name="oldValue" type="xs:string"></xs:attribute>
    </xs:complexType>


    <xs:simpleType name="remarkId">
    	<xs:restriction base="xs:string"></xs:restriction>
    </xs:simpleType>

    <xs:complexType name="remarkList">
        <xs:annotation>
        	<xs:documentation>
        		RemarkList estende RemarkItem e contiene una List di
        		RemarkItem (Container-Component)
        	</xs:documentation>
        </xs:annotation>
        <xs:complexContent>
    		<xs:extension base="bdi:remarkItem">
    			<xs:sequence>
    				<xs:element name="remarks" type="bdi:remarkItem" minOccurs="0" maxOccurs="unbounded"></xs:element>
    			</xs:sequence>
    		</xs:extension>
    	</xs:complexContent>
    </xs:complexType>

    <xs:element name="remarks" type="bdi:remarks"></xs:element>

    <xs:complexType name="remarks">
        <xs:annotation>
        	<xs:documentation>
        		Lista globale dei Remarks
        	</xs:documentation>
        </xs:annotation>
        <xs:sequence>
    		<xs:element name="remark" type="bdi:remark" maxOccurs="unbounded"></xs:element>
    	</xs:sequence>
    </xs:complexType>


    <xs:element name="remarkItem" type="bdi:remarkItem"></xs:element>



    <xs:complexType name="isAlreadySentType">
    	<xs:sequence>
    		<xs:element name="isAlreadySentFlag" type="xs:boolean" maxOccurs="1" minOccurs="1"></xs:element>
    		<xs:element name="outReference" type="xs:string" maxOccurs="1" minOccurs="0"></xs:element>
    		<xs:element name="tmsSent" type="xs:long" maxOccurs="1" minOccurs="0"></xs:element>
    	</xs:sequence>
    </xs:complexType>
</xs:schema>