<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">

  <pattern is-a="self_nested_element">
    <param name="element" value="*[contains(@class, ' topic/xref ')]"/>
  </pattern>
  
  <pattern is-a="nested_element">
    <param name="element" value="*[contains(@class, ' topic/title ')]"/>
    <param name="descendant" value="*[contains(@class, ' topic/xref ')]"/>
  </pattern>

  <pattern is-a="deprecated_element">
    <param name="context" value="*"/>
    <param name="element" value="*[contains(@class, ' topic/boolean ')]"/>
    <param name="reason" value="'The state element should be used instead.'"/>
  </pattern>

  <pattern is-a="deprecated_attribute">
    <param name="context" value="*[contains(@class, ' topic/image ')]"/>
    <param name="attribute" value="'alt'"/>
    <param name="reason" value="'The alt element should be used instead.'"/>
  </pattern>

  <pattern is-a="deprecated_attribute">
    <param name="context" value="*[contains(@class, ' topic/link ')] |
                                 *[contains(@class, ' map/topicref ')]"/>
    <param name="attribute" value="'query'"/>
    <param name="reason" value="'It may be removed in the future.'"/>
  </pattern>

  <pattern abstract="true" id="self_nested_element">
    <rule context="$element">
      <report test="descendant::$element">
        The <name/> contains a <name/>. The results in processing are undefined.
      </report>
    </rule>
  </pattern>
  
  <pattern abstract="true" id="nested_element">
    <rule context="$element">
      <report test="descendant::$descendant">
        The <name/> contains <name path="descendant::$descendant"/>. Using <name path="descendant::$descendant"/> in this context is ill-adviced.
      </report>
    </rule>
  </pattern>

  <pattern abstract="true" id="deprecated_element">
    <rule context="$context">
      <report test="$element">
        The <name/> element is deprecated. <value-of select="$reason"/>
      </report>
    </rule>
  </pattern>
  

  <pattern abstract="true" id="deprecated_attribute">
    <rule context="$context">
      <report test="@*[name() = $attribute]">
        The <value-of select="$attribute"/> attribute is deprecated. <value-of select="$reason"/>
      </report>
    </rule>
  </pattern>

</schema>
