<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="http://projets.admisource.gouv.fr/xemelios/technical/schemas/xsd2html.xsl"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

	<xs:include schemaLocation="TDescription.xsd" />
	<xs:include schemaLocation="TPseudoXPath.xsd" />

	<xs:complexType name="TSpecial-key">
		<xs:annotation>
			<xs:documentation>
				Definit une sepcial-key. Une special-key est un index
				special qui permet des filtres dans cetaines conditions
				(en particulier pour la suppression). Il n'y a en
				general qu'une seule valeur de special-key par flux XML.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:annotation>
				<xs:documentation>
					Liste les descriptions a associer aux codes.
				</xs:documentation>
			</xs:annotation>
			<xs:element name="desc" minOccurs="0" maxOccurs="unbounded"
				type="TDescription" />
		</xs:sequence>
		<xs:attribute name="id" use="required" type="xs:NCName">
			<xs:annotation>
				<xs:documentation>
					Représente un identifiant unique au sein du groupe auquel il appartient.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	    <xs:attribute name="libelle" use="required" type="xs:string">
	        <xs:annotation>
	            <xs:documentation>
	                Le libellé à afficher pour cette special-key
	            </xs:documentation>
	        </xs:annotation>
	    </xs:attribute>
		<xs:attribute name="path" use="required" type="TPseudoXPath">
			<xs:annotation>
				<xs:documentation>
					Chemin XPath permettant d'acceder a la valeur de
					cette special-key. Ce chemin doit imperativement
					permettre de trouver une valeur unique dans un flux
					XML importe.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="pos" use="required" type="TSpecialKeyPos">
			<xs:annotation>
				<xs:documentation>
					La position de cette special-key. Si on definit pour
					un document des special-key surr des valeurs
					Annee-Mois, Mois est une sous valeur de Annee ; dans
					ce cas, Annee aura une position 1 et Mois une
					position 2.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="transform" type="TTransform" use="optional">
			<xs:annotation>
				<xs:documentation>
					La transformation a appliquer aux valeur de cette
					special-key avant l'import.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="TDelete-filter">
		<xs:annotation>
			<xs:documentation>
				Un filtre de suppression. Les filtres de suppression
				s'appuient sur les special-key et premettent de definir
				la hierarchie entre eux.
			</xs:documentation>
		</xs:annotation>
		<xs:attribute name="filter" use="required" type="TPseudoXPath">
			<xs:annotation>
				<xs:documentation>
					Expression pseudo-XPath ou la chaine ##valeur## est
					remplacee par la valeur saisie (ou calculee) dans
					Xemelios. cf. la documentation generale de ce
					fichier pour une expliquation sur la syntaxe
					pseudo-XPath
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="pos" use="required" type="TSpecialKeyPos" />
		<xs:attribute name="sort" use="required" type="TSortBy" />
		<xs:attribute name="special-key-source" use="required" type="TSpecialKeyPos">
			<xs:annotation>
				<xs:documentation>
					position de la special-key correspondante
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>


	<!-- types -->
	<xs:simpleType name="TSpecialKeyPos">
		<xs:restriction base="xs:integer">
			<xs:enumeration value="1" />
			<xs:enumeration value="2" />
			<xs:enumeration value="3" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TSortBy">
		<xs:annotation>
			<xs:documentation>
				permet d'indiquer si une liste de paires doit etre triee
				par clef ou par libelle
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="key" />
			<xs:enumeration value="lib" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TTransform">
		<xs:restriction base="xs:string">
			<xs:enumeration value="normalizeMonth">
				<xs:annotation>
					<xs:documentation>
						Transforme un code de mois (1-12) en un code a 2
						chiffres en prefixant si necessaire par un "0"
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="Identity">
				<xs:annotation>
					<xs:documentation>
						Ne realise aucune transformation (identite)
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="UpperCase" />
			<xs:enumeration value="LowerCase" />
		</xs:restriction>
	</xs:simpleType>

</xs:schema>
