<?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 abstract="true" id="self_nested_element">
    <rule context="$element">
      <report test="descendant::$element">
        The <name/> contains <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>

</schema>
