<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Organisme : Bibliothèque nationale de France
Auteur : BnF/DSR/DSI/SED/BEA
Auteur : Catherine LEROUGE
Auteur : Laurent DUPLOUY
Auteur : Jean-Philippe MOREUX

Version alto_bnf-v2_0 / 16 septembre 2014
Ajout de version et correction de xlink
L'attribut SCHEMAVERSION de alto doit contenir la valeur : alto_bnf-v2_0
L'élément Description de alto est obligatoire

Version altoprod v2.0 / 25 aout 2014
Statut : 
Le schéma BnF altoprod v2.0 utilise le schéma ALTO LoC v3.0

Version 7 / avril-juin 2014
Statut : initialisation de alto_prod version 2
Utilisation du mécanisme xsd:redefine afin de dériver le schéma BnF du schéma LoC 

Version 6 du 10 avril 2012
Statut : validée - dernière version de alto_prod version 1
Ajout d'un paquet de livraison à Spar.
Par rapport à la version 5, pas de modification Alto

Version 5 du 19 janvier 2012
Statut : validée
Ajout d'un attribut TYPE (avec liste de valeurs contrôlée),
dans le type "StringType" (utilisé pour définir l'élément "String").

Version 4.0 du vendredi 20 mai 2011
Statut : reportée
Modification du pattern de /alto/@ID, une longueur de 8 caractères est désormais acceptée (en plus de 6 et 7).

Version 3.0 du jeudi 5 novembre 2009, 17:35:03
Statut : retirée
Patch par Philippe Prados. 
Remplacement des classes de caractères [0-9] dans les expressions régulières par la pseudo-classe /d. 

Version 1.12 du 04 décembre 2007
Statut : retirée
Définition du pattern de /alto/@ID avec longueur de 6 ou 7 caractères
Ajout de l'attribut WD (Word Dictionary) dans String (présence ou pas dans le dictionnaire)

Version 1.11 du 17 novembre 2006
Statut : retirée
Suppression contrainte sur élément PrintSpace => un élément Page peut être vide (il contient alors l'attribut PAGECLASS='BlankPage')

Version 1.1 du 28 février 2006
Statut : retirée
Ajout de containtes. Création du nameSpace "http://bibnum.bnf.fr/ns/alto_prod"

Version 1 du 9 février 2006
Statut : retirée
Les évolutions par rapport à la version de la LOC sont annotées avec la mention "ajout LAD"
-->
<xsd:schema xmlns="http://www.loc.gov/standards/alto/ns-v3#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.loc.gov/standards/alto/ns-v3#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0">
	<!--                             -->
	<!--   Dérivation du schéma BnF à partir du schéma LoC v3.0    -->
	<xsd:redefine schemaLocation="alto_loc-v3_0.xsd">
		<!--                             -->
		<!--                             -->
		<xsd:complexType name="altoType">
			<xsd:complexContent>
				<xsd:restriction base="altoType">
					<xsd:sequence>
						<xsd:element name="Description" type="DescriptionType">
							<xsd:annotation>
								<xsd:documentation>Modification JPM du 7 septembre 2014</xsd:documentation>
								<xsd:documentation>Elément Description rendu obligatoire</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="Styles" type="StylesType" minOccurs="0"/>
						<xsd:element name="Tags" type="TagsType" minOccurs="0"/>
						<xsd:element name="Layout" type="LayoutType"/>
					</xsd:sequence>
					<xsd:attribute name="SCHEMAVERSION" use="required">
						<xsd:annotation>
							<xsd:documentation>Attribut SCHEMAVERSION rendu obligatoire. Il identifie la version du schéma ALTO BnF</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:restriction base="xsd:string">
								<xsd:pattern value="alto_bnf-v2_0"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:restriction>
			</xsd:complexContent>
		</xsd:complexType>
		<!-- ID sur alto : supprimé pour compatibilité ALTO LoC 
              L'identifiant du document numérique est porté par <fileIdentifier> et  <documentIdentifier> -->
		<xsd:complexType name="sourceImageInformationType">
			<xsd:annotation>
				<xsd:documentation>Modification JPM du 8 juillet 2014</xsd:documentation>
				<xsd:documentation>Elément fileName rendu obligatoire, cardinalité = 1</xsd:documentation>
				<xsd:documentation>Elément documentIdentifier rendu obligatoire, cardinalité = 1</xsd:documentation>
			</xsd:annotation>
			<xsd:complexContent>
				<xsd:restriction base="sourceImageInformationType">
					<xsd:sequence>
						<xsd:element name="fileName" type="fileNameType" maxOccurs="1"/>
						<xsd:element name="fileIdentifier" type="fileIdentifierType" minOccurs="0" maxOccurs="unbounded"/>
						<xsd:element name="documentIdentifier" type="documentIdentifierType" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:restriction>
			</xsd:complexContent>
		</xsd:complexType>
		<!-- 	                             -->
		<xsd:simpleType name="documentIdentifierValueType">
			<xsd:annotation>
				<xsd:documentation>Ajout LAD du 7 novembre 2005.</xsd:documentation>
				<xsd:documentation>Ajout d'un attribut ID qui référence l'ID du document numérique. </xsd:documentation>
				<xsd:documentation>Modification du 04 décembre 2007 - définition du pattern de /alto/@ID avec longueur de 6 ou 7 caractères</xsd:documentation>
				<xsd:documentation>Modification du 20 mai 2011 - modification du pattern de /alto/@ID : une longueur de 8 caractères est désormais acceptée</xsd:documentation>
				<xsd:documentation>Modification JPM du 8 juillet 2014</xsd:documentation>
				<xsd:documentation>Report du pattern sans préfixe "alto."</xsd:documentation>
				<xsd:documentation>Modification du 23 septembre 2020 - longueur identifiant 9 caractères est désormais acceptée</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="documentIdentifierValueType">
				<xsd:pattern value="\d{6,9}"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!-- 	                             -->
		<xsd:simpleType name="documentIdentifierLocationValueType">
			<xsd:annotation>
				<xsd:documentation>Ajout JPM du 8 juillet 2014.</xsd:documentation>
				<xsd:documentation>Valeurs limitées :  "NUM" ou "IFN"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="documentIdentifierLocationValueType">
				<xsd:pattern value="NUM|IFN"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                              -->
		<xsd:simpleType name="fileNameType">
			<xsd:annotation>
				<xsd:documentation>Modification LAD du 28 février 2006</xsd:documentation>
				<xsd:documentation>Syntaxe contrainte à une série de valeurs attendues</xsd:documentation>
				<xsd:documentation>Modification JPM du 8 juillet 2014</xsd:documentation>
				<xsd:documentation>Ajout de JPEG2000</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="fileNameType">
				<xsd:pattern value="\d{8}.(TIF|tif|JPG|jpg|jp2|JP2)"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                              -->
		<xsd:simpleType name="MeasurementUnitType">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS :  pattern fixe</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="MeasurementUnitType">
				<xsd:pattern value="pixel"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                              -->
		<xsd:complexType name="PageType">
			<xsd:annotation>
				<xsd:documentation>Modification JPM du 8 juillet 2014</xsd:documentation>
				<xsd:documentation>Attributs ACCURACY et QUALITY rendus obligatoires</xsd:documentation>
			</xsd:annotation>
			<xsd:complexContent>
				<xsd:restriction base="PageType">
					<xsd:sequence>
						<xsd:element name="TopMargin" type="PageSpaceType" minOccurs="0"/>
						<xsd:element name="LeftMargin" type="PageSpaceType" minOccurs="0"/>
						<xsd:element name="RightMargin" type="PageSpaceType" minOccurs="0"/>
						<xsd:element name="BottomMargin" type="PageSpaceType" minOccurs="0"/>
						<xsd:element name="PrintSpace" type="PageSpaceType" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="ID" type="PageID" use="required"/>
					<xsd:attribute name="PAGECLASS" type="xsd:string" use="optional"/>
					<xsd:attribute name="STYLEREFS" type="xsd:IDREFS" use="optional"/>
					<xsd:attribute name="HEIGHT" type="xsd:float" use="optional"/>
					<xsd:attribute name="WIDTH" type="xsd:float" use="optional"/>
					<xsd:attribute name="PHYSICAL_IMG_NR" type="xsd:float" use="required"/>
					<xsd:attribute name="PRINTED_IMG_NR" type="xsd:string" use="optional"/>
					<xsd:attribute name="QUALITY" type="QualityType" use="required"/>
					<xsd:attribute name="QUALITY_DETAIL" type="QualityDetailType" use="optional"/>
					<xsd:attribute name="POSITION" type="PositionType" use="optional"/>
					<xsd:attribute name="PROCESSING" type="xsd:IDREF" use="optional"/>
					<xsd:attribute name="ACCURACY" type="xsd:float" use="required"/>
					<xsd:attribute name="PC" type="PCType" use="optional"/>
				</xsd:restriction>
			</xsd:complexContent>
		</xsd:complexType>
		<!--                                   -->
		<xsd:simpleType name="PageSpaceTypeID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000002_TopMargin"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="PageSpaceTypeID">
				<xsd:pattern value="PAG_\d*_((Top|Bottom|Left|Right)Margin|PrintSpace)"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                           -->
		<xsd:simpleType name="SPTypeID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000002_SP000002"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="SPTypeID">
				<xsd:minLength value="1"/>
				<xsd:pattern value="PAG_\d*_SP\d{6}"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                   -->
		<xsd:complexType name="SPType">
			<xsd:annotation>
				<xsd:documentation>L'ID devient obligatoire</xsd:documentation>
			</xsd:annotation>
			<xsd:complexContent>
				<xsd:restriction base="SPType">
					<xsd:attribute name="ID" type="SPTypeID" use="required"/>
					<xsd:attribute name="HEIGHT" type="xsd:float" use="optional"/>
					<xsd:attribute name="WIDTH" type="xsd:float" use="optional"/>
					<xsd:attribute name="HPOS" type="xsd:float" use="optional"/>
					<xsd:attribute name="VPOS" type="xsd:float" use="optional"/>
				</xsd:restriction>
			</xsd:complexContent>
		</xsd:complexType>
		<!--                                   -->
		<xsd:simpleType name="ParagraphStyleID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="TXT_1"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="ParagraphStyleID">
				<xsd:pattern value="TXT_\d*"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                   -->
		<xsd:simpleType name="PageID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000002"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="PageID">
				<xsd:pattern value="PAG_\d*"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                   -->
		<xsd:simpleType name="BlockTypeID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000002_TB000003"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="BlockTypeID">
				<xsd:pattern value="PAG_\d*_(TB|IL|GE|CB)\d{6}"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                        -->
		<xsd:simpleType name="TextLineID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000001_TL000004"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="TextLineID">
				<xsd:pattern value="PAG_\d*_TL\d{6}"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                           -->
		<xsd:simpleType name="StringTypeID">
			<xsd:annotation>
				<xsd:documentation>Patch Ph. PRADOS LAD</xsd:documentation>
				<xsd:documentation>Ajout d'un pattern sur l'attribut ID</xsd:documentation>
				<xsd:documentation>exemple :  ID="PAG_00000001_ST000011"</xsd:documentation>
			</xsd:annotation>
			<xsd:restriction base="StringTypeID">
				<xsd:pattern value="PAG_\d*_ST\d{6}"/>
			</xsd:restriction>
		</xsd:simpleType>
		<!--                                           -->
	</xsd:redefine>
</xsd:schema>
