<?xml version="1.0" encoding="utf-8"?>
<!-- Time-stamp: "is-a.sch  20 jan 2010 10:31:12" -->
<!-- Schematron sur les blocs abstraits des schematrons -->
<schema xmlns="http://purl.oclc.org/dsdl/schematron"  
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	queryBinding="xslt"
	schemaVersion="ISO19757-3">                  
  <title>Vérification des liens is-a des schematrons</title>

  <p>Ce schematron vérifie que, dans un schematron, tout bloc référencé
  par un autre bloc par l'attribut is-a est bien déclaré abstrait par
  l'attribut abstract à true.</p>
 
  <!-- Déclaration de l'espace de noms cible : celui des schematrons -->
  <!-- Ne pas utiliser le préfixe sch car cela pose problème -->
  <ns prefix="tns" uri="http://purl.oclc.org/dsdl/schematron"/>

  <!-- Clé pour retrouver les éléments pattern par leur id -->
  <xsl:key name="patid" match="tns:pattern" use="@id"/> 

  <pattern>
    <rule context="tns:pattern[@is-a]" >                                  
      <assert test="key('patid', @is-a)">
	L'attribut is-a doit référencer un bloc abstrait.
      </assert>  
      <report test="@abstract = 'true'">
        Un bloc avec un attribut is-a ne peut pas être abstrait.
      </report>  
      <report test="rule">
        Un bloc avec un attribut is-a ne peut pas contenir de règle.
      </report>  
    </rule>
  </pattern>
  <pattern>
    <rule context="tns:pattern[@abstract = 'true']">
      <assert test="@id">
        Un bloc abstrait doit avoir un attribut id.
      </assert>  
      <report test="@is-a">
        Un bloc abstrait ne peut pas avoir un attribut is-a.
      </report>  
    </rule>
  </pattern>
</schema>

