<!---------Exo 1.1 ----------->
<!ELEMENT t (A|B|C)*>
<!ELEMENT A EMPTY>
<!ELEMENT B EMPTY>
<!ELEMENT C EMPTY>
<!---------Exo 1.2 ----------->
<!ELEMENT t (A,B,C)+>
<!ELEMENT A EMPTY>
<!ELEMENT B EMPTY>
<!ELEMENT C EMPTY>

<!---------Exo 2 -----------
- un individu avec a un nom, un prénom et une nationalité + types de base cohérents : 1
- un film avec un titre, un genre, une année et une nationalité + types de base cohérents : 1
- lien individu - acteur - film : 1 + notion rôle(s) : 0.5
- lien individu - réalisateur - film : 0.5
- un indiv peut être acteur et réalisateur ds 1 même film ou plusieurs : 0.5
- non redondance des données : 0.5
- type genre : 0.5
- un élément racine + assemblage général pour naviguer vers toutes les données : 0.5
-->
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- Quelques elements simples -->


<!-- Definition d un simple type -->
<xs:simpleType name="TypeGenre">
	<xs:restriction base="xs:string">
		<xs:enumeration value="drame"/>
		<xs:enumeration value="comedie"/>
		<xs:enumeration value="aventures"/>
		<xs:enumeration value="fantastique"/>
	</xs:restriction>
</xs:simpleType>

<!-- Definition des elements complexes -->

<xs:complexType name="individu">
	<xsd:attribute name="nom" type="xsd:string" use="required" />
	<xsd:attribute name="prenom" type="xsd:string" use="required" />
	<xsd:attribute name="nationalite" type="xsd:string" use="required" />
</xs:complexType>

<xs:element name="indiv_real_film">
	<xs:complexType>
			<xs:attribut ref="filminfo"/>	
            <xs:attribut ref="individu"/>		
	</xs:complexType>
</xs:element>

<xs:element name="indiv_acteur_film">
	<xs:complexType>
			<xs:attribut ref="filminfo"/>	
            <xs:attribut ref="individu"/>		
			<xs:attribut ref="role" minOccurs="1" maxOccurs="unbounded"/>
	</xs:complexType>
</xs:element>

<xs:element name="filminfo">
	<xs:complexType>
		<xsd:attribute name="titre" type="xsd:string" use="required" />
		<xsd:attribute name="genre" type="tGenre" use="required" />
		<xsd:attribute name="annee" type="xsd:date" use="required" />
		<xsd:attribute name="nationalite" type="xsd:string" />
	</xs:complexType>
</xs:element>

<xs:element name="cinema">
	<xs:complexType>
		<xs:sequence>
			<xs:element ref="filminfo" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>

</xs:schema>

<!---------Exo 3.1 ----------->
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:output method="text" encoding="utf-8" />

<!-- main template -->
<xsl:template match="nba">
Equipes de la NBA :
<xsl:apply-templates select="equipes/equipe" />
</xsl:template>

<xsl:template match="equipe">
<xsl:variable name="id" select="@id" />
 <xsl:value-of select="concat(@nom,' créé en ',@fondation)" />
    <xsl:for-each select="/nba/saison/saisonReguliere/classement/equipe[@ref = current()/@id]">
       <xsl:value-of select="concat(
							../../../@annee, ' : ',
							@clst,'e ',
							../@conference,
							' (',@victoires,'V, ',@defaites,'D) ')" />
        <xsl:for-each select="../../../playoffs//equipe[xs:integer(substring(@ref,2)) = current()/@clst
                        and substring(@ref,1,1) = substring(current()/../@conference,1,1)]">
               <xsl:if test="position() = 1"><xsl:value-of select="../@niveau" /><xsl:if 
                       test="../@niveau = 'Finale NBA' and @victoires = 4"> (Champion NBA)</xsl:if></xsl:if>
        </xsl:for-each>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

<!---------Exo 3.2 ----------->
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
 <xsl:output method="text" encoding="utf-8" />

<!-- main template -->
<xsl:template match="nba">
   <xsl:for-each select="//playoffs">
       <xsl:variable name="annee" select="../@annee" />
          <xsl:variable name="cut" select="@cut" />
           <!-- pb du cut -->
          <xsl:for-each select="descendant::equipe">
	          <xsl:if test="xs:integer(substring(@ref,2)) > $cut">
	           Fichier NBA corrompu : Saison <xsl:value-of select="$annee" /> : équipe qualifiée en play-offs après le cut</xsl:if>
          </xsl:for-each>
         <!-- pb des vainqueurs -->
        <xsl:for-each select="descendant::match[match]">
           <xsl:for-each select="equipe">
                <xsl:for-each select="../match/equipe[@ref = current()/@ref and @victoires != 4]">
	                Fichier NBA corrompu : Saison <xsl:value-of 
	                   select="$annee" /> : équipe <xsl:value-of select="@ref" /> qualifiée au tour suivant en perdant
                </xsl:for-each>
            </xsl:for-each>
        </xsl:for-each>

    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

<!---------Exo 3.3 ----------->
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:output method="text" encoding="utf-8" />

<!-- main template -->
<xsl:template match="nba">
<xsl:for-each-group select="saison/saisonReguliere/classement/equipe" group-by="@ref">
      <xsl:value-of select="/nba/equipes/equipe[@id = current-grouping-key()]/@nom" /> : <xsl:value-of
        select="count(current-group())" /> saisons ; total <xsl:value-of
        select="sum(current-group()/@victoires)" />V <xsl:value-of
        select="sum(current-group()/@defaites)" />D ; moyenne <xsl:value-of
        select="round(avg(current-group()/@victoires))" />V <xsl:value-of
        select="round(avg(current-group()/@defaites))" />D
</xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>
