<?xml version="1.0" encoding="utf-8"?>
<!-- versione 4.0 

====================================================modifiche versione 2.0:
  <xs:simpleType name= "ConfCarta">
    <xs:restriction base = "xs:string">
      <xs:pattern value='CNS,DUAL(,TS,DS|,DS,TS|,TS|,DS)?(,HPC|,PDC)?$|CNS,DUAL(,HPC|,PDC)(,TS,DS|,DS,TS|,TS|,DS)$'/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name= "ConfCarta">
    <xs:restriction base = "xs:string">
      <xs:pattern value='CNS,DUAL(,DS)?(,HPC|,PDC)?$|CNS,DUAL(,HPC|,PDC)(,DS)$'/>
    </xs:restriction>
  </xs:simpleType>

====================================================modifiche versione 3.0:
  <xs:element name="nome">
    <xs:simpleType>
      <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,15}" /> .....
  <xs:element name="nome">
    <xs:simpleType>
      <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,25}" /> .....

====================================================modifiche versione 4.0:
*** SOSPESA ***<xs:element ref="ente" maxOccurs="unbounded" />
*** SOSPESA ***<xs:element ref="ente" maxOccurs="1" />

*** SOSPESA ***  <xs:simpleType name="cognome">
*** SOSPESA ***    <xs:restriction base="xs:string">
*** SOSPESA ***     <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,34}" />*** SOSPESA ***
*** SOSPESA ***     <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,25}" />*** SOSPESA ***

-->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="requests">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ente" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ente">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="delivery" />
        <xs:element ref="request" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="value" use="required" type="xs:string" />
      <xs:attribute name="codice" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:pattern value="[0-9]{1,8}" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="prefix" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="[LRNlrn]{1}[ 0-9A-Za-z]{1,6}" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="delivery">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ufficio" />
        <xs:element ref="name" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ufficio">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z]{1}[ A-Za-z0-9,'\-)(./]{1,100}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="name">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z]{1}[ A-Za-z.'\-]{1,100}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="request">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="nome" />
        <xs:element ref="cognome" />
        <xs:element ref="quando" />
        <xs:element ref="dove" />
        <xs:element ref="residenza" />
        <xs:element ref="prov" />
        <xs:element ref="cf" />
        <xs:element ref="cap" />
        <xs:element ref="sesso" />
        <xs:element ref="codice" minOccurs="0" />
        <xs:element ref="espatrio" minOccurs="0" />
        <xs:element ref="ruolo" minOccurs="0" />
        <xs:element ref="email" minOccurs="0" />
        <xs:element ref="bank" minOccurs="0" />
        <xs:element ref="layout" minOccurs="0" />
        <xs:element ref="lettore" minOccurs="0" />
        <xs:element ref="conf" />
        <xs:element ref="indirizzo" />
        <xs:element ref="custom" />
  	<xs:element ref="codiceTitolare" minOccurs="0" />
        <xs:element ref="netlink" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="nome">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,25}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="cognome">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z]{1}[ A-Za-z']{1,34}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="quando" type="data"/>
  <xs:element name="dove" type="CodBelfiore"/>
  <xs:element name="residenza" type="CodBelfiore"/>
  <xs:element name="prov">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[A-Za-z]{2}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="cf" type="CodFiscale"/>
  <xs:element name="cap">
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:pattern value="[0-9]{5}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="sesso">
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:pattern value="[0-2]{1}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="codice" type="xs:string" />
  <xs:element name="espatrio">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="S" />
        <xs:enumeration value="N" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="ruolo" type="xs:string" />
  <xs:element name="email" type="email" />
  <xs:element name="bank" type="xs:string" />
  <xs:element name="layout">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0-9A-Za-z]{2}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="lettore">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="S" />
        <xs:enumeration value="N" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="conf" type="ConfCarta"/>
  <xs:element name="indirizzo">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="riga" minOccurs="2" maxOccurs="3" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="custom">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="riga" minOccurs="1" maxOccurs="10"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="riga">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="tyRiga">
          <xs:attribute name="pos">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:pattern value="1|2|3|4|5|6|7|8|9|10"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="codiceTitolare">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[ A-Za-z0-9!#-/]{1,40}" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="netlink" type="xs:string" />

  <xs:simpleType name="tyRiga" id="idtyRiga" final="restriction">
    <xs:restriction base="xs:string">
      <xs:maxLength value="30"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Codici Belfiore -->
  <xs:simpleType name= "CodBelfiore">
    <xs:restriction base = "xs:string">
      <xs:pattern value='[A-Za-z]{1}\d{3}$'/>
    </xs:restriction>
  </xs:simpleType>

  <!-- 
Codice fiscale 
  <xs:simpleType name= "CodFiscale">
    <xs:restriction base = "xs:string">
      <xs:pattern value='[A-Za-z]{6}\d{2}[ABCDEHLMPRSTabcdehlmprst]{1}\d{2}[A-Za-z]{1}\d{3}[A-Za-z0-9]{1}$'/>
    </xs:restriction>
  </xs:simpleType>
-->
  <xs:simpleType name= "CodFiscale">
    <xs:restriction base = "xs:string">
      <xs:pattern value='[A-Za-z0-9]{16}$'/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Indirizzo email -->
  <xs:simpleType name= "email">
    <xs:restriction base = "xs:string">
      <xs:minLength value="5" />
      <xs:maxLength value="64" />
      <!-- necessario adeguamento tabella CarteRichieste -->
    <xs:pattern value="[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*@[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*"/>
  </xs:restriction>
</xs:simpleType>

<!-- Conf Carta -->
  <xs:simpleType name= "ConfCarta">
    <xs:restriction base = "xs:string">
      <xs:pattern value='CNS,DUAL(,DS)?(,HPC|,PDC)?$|CNS,DUAL(,HPC|,PDC)(,DS)$'/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Controllo data -->
<xs:simpleType name= "data">
  <xs:restriction base = "xs:string">
   <xs:pattern value='[1-2][0-9][0-9][0-9](([0][1|3|5|7|8])([0][1-9]|[1-2][0-9]|[3][0-1])|([0][4|6|9])([0][1-9]|[1-2][0-9]|[3][0])|([0][2])([0][1-9]|[1-2][0-9])|([1][0|2])([0][1-9]|[1-2][0-9]|[3][0-1])|([1][1])([0][1-9]|[1-2][0-9]|[3][0]))'/>
  </xs:restriction>
</xs:simpleType>

</xs:schema>
