<?xml version="1.0" encoding="UTF-8"?>

<!-- L'historique de cette DTD présentant ses diverses versions est dans le fichier historiqueChapitre.dtd.txt-->

<!-- ================ Declarations d'entites ============================= -->
<!--<!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">-->
<!ENTITY % HTMLspecial SYSTEM "xhtml-special.ent">
%HTMLspecial;
<!ENTITY % URI "CDATA">
<!ENTITY % enligne "#PCDATA | definition | valeur | index | autrelangue | code | reference | abreviation| image | logiciel | puissance">
<!ENTITY % bloc "image | texte | liste | définitions | exemple | exemplejavascript | exemple_css | tableau | imagereactive | SVG | exempleexterne">
<!-- =================== Declarations d'elements ============================== -->
<!ELEMENT chapitre (cours, entete, corpus)>
	<!ATTLIST chapitre 
	    typecourssiteweb (xml|html|dhtml|python) #REQUIRED
	>
<!ELEMENT cours (#PCDATA)>
<!-- Nom du fichier XML sans l'extension -->
	<!ATTLIST cours nomfichier CDATA #REQUIRED >
<!--    Declarations des elements de l'entete     -->
	<!ELEMENT entete (titre, auteur, resume, motsclefs)>
		<!ELEMENT titre (#PCDATA)>
		<!ELEMENT auteur (#PCDATA)>
			<!ATTLIST auteur
				email CDATA #IMPLIED
			>
			
	<!ELEMENT resume (#PCDATA)>
	<!ELEMENT motsclefs (#PCDATA)>
	
<!--  Declarations des elements du corps du cours   -->
<!ELEMENT corpus (partie*, bibliographie?)>
<!ELEMENT partie (section | exercice | paragraphe)*>
<!ELEMENT section (paragraphe | liste | exercice)*>
<!ELEMENT paragraphe (%bloc;)*>
<!ATTLIST paragraphe
	titre CDATA #IMPLIED
	auteur CDATA ""
	date CDATA ""
	href %URI; ""
	ancre ID #IMPLIED
>
<!ELEMENT liste (item)*>

<!ELEMENT item (%bloc;)*>
<!ATTLIST liste
	type (envrac | ordonnee | sanspuce) "envrac"
>

<!ELEMENT définitions (terme,def+)+>

<!ELEMENT terme (%enligne;)* >
<!ELEMENT def (%enligne;)* >

<!ELEMENT tableau (groupecolonne*,ligne*, legende?)>
<!ATTLIST tableau
	bordure CDATA "1"
>
<!ELEMENT groupecolonne EMPTY>
	<!ATTLIST groupecolonne
		nombre CDATA "1"
		largeur CDATA #IMPLIED
	>
<!ELEMENT ligne (colonne*)>
<!ELEMENT colonne (%bloc;)*>
<!ATTLIST colonne
	type (header | normal) "normal"
	id ID #IMPLIED
	abbr CDATA #IMPLIED
	headers IDREFS #IMPLIED
>
<!ATTLIST ligne
	type (header | normal) "normal"
>
<!ELEMENT legende (%enligne;)*>

<!ELEMENT image (legende?)>
<!ATTLIST image
	src %URI; #REQUIRED
	hauteur CDATA #IMPLIED
	largeur CDATA #IMPLIED
	alt CDATA #REQUIRED
	classe (normal | illustration) "normal"
>
<!ELEMENT imagereactive (zone+, legende?)>
<!ATTLIST imagereactive
	src %URI; #REQUIRED
	hauteur CDATA ""
	largeur CDATA ""
	alt CDATA #REQUIRED
	nom CDATA #REQUIRED
>
<!ELEMENT zone EMPTY>
<!ATTLIST zone
	forme (rect | circle | poly | default) "rect"
	coords CDATA #IMPLIED
	href %URI; #IMPLIED
	alt CDATA #REQUIRED
>
<!ELEMENT texte (%enligne;)*>
<!ATTLIST section
	titre CDATA #REQUIRED
	auteur CDATA ""
	date CDATA ""
	href %URI; ""
	ancre ID #REQUIRED
>
<!ELEMENT exercice (remarque?,enonce?, correction*)>
<!ELEMENT remarque (#PCDATA)>
<!ELEMENT enonce EMPTY>
<!ATTLIST enonce
	href %URI; ""
>
<!ELEMENT correction EMPTY>
<!ATTLIST correction
	href %URI; #REQUIRED
	description CDATA #IMPLIED
>
<!ATTLIST exercice
	titre CDATA #REQUIRED
	auteur CDATA ""
	date CDATA ""
	ancre ID #REQUIRED
>
<!ATTLIST partie
	titre CDATA #REQUIRED
	auteur CDATA ""
	date CDATA ""
	href %URI; ""
	ancre ID #REQUIRED
>

<!-- Definitions d'elements en-ligne -->
<!ELEMENT abreviation (#PCDATA|code)*>
	<!ATTLIST abreviation
		titre CDATA #IMPLIED
		lang CDATA #IMPLIED
	>
<!ELEMENT index (#PCDATA)>
<!ATTLIST index
	type (visible | hidden) "hidden"
	id ID #REQUIRED
>
<!ELEMENT definition (#PCDATA)>
<!ATTLIST definition
	clef CDATA #REQUIRED
	lang CDATA #IMPLIED
>

<!ELEMENT autrelangue (%enligne;)*>
<!ATTLIST autrelangue
	type CDATA "en"
>
<!ELEMENT valeur ANY>
<!ATTLIST valeur
 	lang CDATA #IMPLIED
 >
<!ELEMENT code (#PCDATA)>
<!ATTLIST code
	type (langage | code | typefichier) "code"
	option (yes | no) "no"
>
<!ELEMENT logiciel (#PCDATA)* >
<!ATTLIST logiciel
 	lang CDATA #IMPLIED
 >

<!ELEMENT exemple (prologue | instruction_traitement | element | commentaire | typedocument | cdat | declaration_element | declaration_entite | typedocument_interne)*>
<!ATTLIST exemple
	type (XML | HTML | HTML4 | HTML5 | illustration) #REQUIRED
	ancre ID #IMPLIED
>

<!ELEMENT prologue EMPTY>
<!ATTLIST prologue
	encodage CDATA "ISO-8859-1"
	version CDATA "1.0"
	standalone (yes | no) #IMPLIED 
>

<!ELEMENT instruction_traitement EMPTY >
<!ATTLIST instruction_traitement
	nom CDATA #REQUIRED
	type CDATA #REQUIRED
	href %URI; #REQUIRED
>

<!ELEMENT element (#PCDATA | attribut |commentaire | element | cdat | contenu)* >
<!ATTLIST element
 	nom CDATA #REQUIRED
 	enligne (oui | non) "non"
 	indent (oui | non) "non"
	niveau CDATA "0"
	vide (oui | non) "non"
 >
 
 <!ELEMENT contenu (#PCDATA)>
 <!-- Cet élément est réservé aux éléments non en ligne pour lequel un contenu doit être inséré à la ligne. Par exemple :<style>
     (...)
 </style>
 -->
 <!ATTLIST contenu
     niveau CDATA "0" 
>
 
 <!ELEMENT attribut (#PCDATA)>
 <!ATTLIST attribut
 	nom CDATA #REQUIRED
 	pseudo (non | oui) "non"
 >
 
 <!ELEMENT commentaire (#PCDATA)>
 	<!ATTLIST commentaire niveau CDATA "0">
  <!ELEMENT cdat (#PCDATA)>
  
  <!ELEMENT typedocument EMPTY>
  <!ATTLIST typedocument
  	nomracine CDATA #REQUIRED
  	type (SYSTEM|PUBLIC|...) #IMPLIED
  	identifiant CDATA #IMPLIED
  	href %URI; #IMPLIED
 >
 
 <!ELEMENT typedocument_interne (declaration_element | declaration_entite)*>
   <!ATTLIST typedocument_interne
  	nomracine CDATA #REQUIRED
  >
 
 <!ELEMENT declaration_element (declaration_attribut*)>
 <!ATTLIST declaration_element
 	nom CDATA #REQUIRED
 	type CDATA #REQUIRED
 >
 
  <!ELEMENT declaration_attribut EMPTY>
 <!ATTLIST declaration_attribut
 	nomattr CDATA #REQUIRED
 	valeur CDATA #REQUIRED
 	type (IMPLIED | REQUIRED | FIXED | chaine) #REQUIRED
 	defaut CDATA #IMPLIED
 >
 
 <!ELEMENT declaration_entite EMPTY>
  <!ATTLIST declaration_entite
 	nom CDATA #REQUIRED
 	valeur CDATA #REQUIRED
 	type (paramétrique | caractères) "caractères"
 	syspub (system | public | autre) "autre"
 	identifiant CDATA #IMPLIED
 >

<!ELEMENT exemple_css (csselt|commentaireCSS)* >
<!ELEMENT commentaireCSS (#PCDATA) >
<!ELEMENT csselt (selecteur, prop+)>
<!ELEMENT selecteur (#PCDATA)>
<!ELEMENT prop EMPTY>
<!ATTLIST prop
	nom CDATA #REQUIRED
	valeur CDATA #REQUIRED
>
	
<!ELEMENT exemplejavascript (méthode | fonction | instruction | variable | propriete | declaration | autres | finligne | sautligne | bloc | commentaire_js|commentaire_python)*>
    <!ATTLIST exemplejavascript brut (oui|non) "non" >
<!ELEMENT bloc (méthode | fonction | instruction | variable | propriete | declaration | autres | finligne | sautligne | bloc | commentaire_js)* >
	<!ATTLIST bloc
		niveau CDATA "0"
		avec_retour (vrai|faux) "vrai">
<!ELEMENT fonction (variable | autres | propriete | fonction| instruction | méthode)*>
	<!ATTLIST fonction
		name CDATA #REQUIRED
		niveau CDATA "0"
		sansparenthèses (vrai |faux) "faux">
<!ELEMENT méthode (variable | autres | propriete | fonction| instruction | méthode)*>
	<!ATTLIST méthode
		name CDATA #REQUIRED
		sansparenthèses (vrai |faux) "faux"
	>
<!ELEMENT instruction EMPTY>
	<!ATTLIST instruction
		name CDATA #REQUIRED
		niveau CDATA "0">
<!ELEMENT variable EMPTY>
	<!ATTLIST variable
		name CDATA #REQUIRED
		niveau CDATA "0">
<!ELEMENT propriete EMPTY>
	<!ATTLIST propriete
		name CDATA #REQUIRED
		niveau CDATA "0">
<!ELEMENT declaration EMPTY>
	<!ATTLIST declaration
		nomvariable CDATA #REQUIRED
		valeur CDATA #REQUIRED
		new (oui|non) "oui"
		niveau CDATA "0"
		type (var|const|let) "var">
<!ELEMENT autres (#PCDATA)>
	<!ATTLIST autres niveau CDATA "0" >
<!ELEMENT finligne EMPTY>
	<!ATTLIST finligne caractère CDATA ";" >
<!ELEMENT sautligne EMPTY>
<!ELEMENT commentaire_js (#PCDATA|sautligne)*>
	<!ATTLIST commentaire_js niveau CDATA "0" >
<!ELEMENT commentaire_python (#PCDATA) >
	<!ATTLIST commentaire_python niveau CDATA "0" >
	
<!ELEMENT exempleexterne EMPTY >
<!ATTLIST exempleexterne href %URI; #REQUIRED >

<!ELEMENT reference ANY>
<!ATTLIST reference
	href %URI; #REQUIRED
	lang CDATA #IMPLIED
	hreflang CDATA #IMPLIED
>

<!ELEMENT puissance (#PCDATA) >

<!ELEMENT bibliographie (author, titre, editeur, lien?, commentaire)?>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT editeur (#PCDATA)>
<!ELEMENT lien (#PCDATA)>
<!ATTLIST bibliographie
	auteur CDATA ""
	date CDATA ""
	href %URI; ""
>

<!ELEMENT SVG EMPTY >
<!ATTLIST SVG href  %URI; #REQUIRED>