mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="UTF-8"?>
 | 
						|
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
 | 
						|
   queryBinding="xslt2"
 | 
						|
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 | 
						|
 | 
						|
  <!-- XSLT 2.0 Schematron by Wendell Piez (Mulberry Technologies, Inc.),
 | 
						|
       August 2011 -->
 | 
						|
  
 | 
						|
  <!-- This Schematron is released into the public domain.     
 | 
						|
       Please credit your sources. -->
 | 
						|
  
 | 
						|
  
 | 
						|
  <!-- Requires Schematron that allows embedded XSLT 2.0 with support for
 | 
						|
       the namespace:: axis. Tested with Saxon 9.3.0.5. -->
 | 
						|
  
 | 
						|
  <ns prefix="m" uri="http://www.mulberrytech.com/xslt/util"/>
 | 
						|
  
 | 
						|
  <xsl:variable name="ns-set" xmlns:m="http://www.mulberrytech.com/xslt/util">
 | 
						|
    <!-- include elements to declare expected namespace prefixes
 | 
						|
         with their bindings, like so:
 | 
						|
 | 
						|
         (prefix 'mml')
 | 
						|
         <m:ns prefix="mml"   uri="http://www.w3.org/1998/Math/MathML"/>
 | 
						|
         (default namespace, no prefix)
 | 
						|
         <m:ns prefix=""      uri="http://www.w3.org/1998/Math/MathML"/>
 | 
						|
         -->
 | 
						|
         
 | 
						|
    <m:ns prefix="mml"   uri="http://www.w3.org/1998/Math/MathML"/>
 | 
						|
    <m:ns prefix="xlink" uri="http://www.w3.org/1999/xlink"/>>
 | 
						|
    <m:ns prefix="oasis" uri="http://docs.oasis-open.org/ns/oasis-exchange/table"/>
 | 
						|
 | 
						|
    <!-- 'xml' prefix is always in scope with this binding -->
 | 
						|
    <m:ns prefix="xml"   uri="http://www.w3.org/XML/1998/namespace"/>
 | 
						|
  </xsl:variable>
 | 
						|
  
 | 
						|
  <pattern>
 | 
						|
    <!-- checking the document element against the spec given in ns-set -->
 | 
						|
    <rule context="/*">
 | 
						|
      <let name="new-prefixes" value="in-scope-prefixes(.)[not(. = $ns-set/m:ns/@prefix)]"/>
 | 
						|
      <let name="new-namespaces" value="(for $p in (in-scope-prefixes(.)) return namespace-uri-for-prefix($p,.))
 | 
						|
        [not(. = $ns-set/m:ns/@uri)]"/>
 | 
						|
      <report test="exists($new-prefixes)">
 | 
						|
        Unrecognized namespace prefix<xsl:value-of select="('es')[count($new-prefixes) gt 1]"/>: 
 | 
						|
        <value-of select="string-join(
 | 
						|
          (for $p in $new-prefixes return m:label($p)),
 | 
						|
          ', ')"/>
 | 
						|
      </report>
 | 
						|
      <report test="exists($new-namespaces)">
 | 
						|
        Unrecognized namespace URI<xsl:value-of select="('s')[count($new-namespaces) gt 1]"/>: 
 | 
						|
        <value-of select="string-join(($new-namespaces),', ')"/>
 | 
						|
      </report>
 | 
						|
      
 | 
						|
      <let name="misassigned-prefixes" value="in-scope-prefixes(.)[not(.=$new-prefixes)]
 | 
						|
        [for $p in (.) return 
 | 
						|
          namespace-uri-for-prefix($p,current()) ne $ns-set/m:ns[@prefix=$p]/@uri]"/>
 | 
						|
      <report test="exists($misassigned-prefixes)">
 | 
						|
        Prefix<xsl:value-of select="('es')[count($misassigned-prefixes) gt 1]"/> 
 | 
						|
        assigned incorrectly: <value-of select="string-join(
 | 
						|
          (for $p in $misassigned-prefixes return
 | 
						|
          concat(m:label($p), ' (should be ''',$ns-set/m:ns[@prefix=$p]/@uri,''')')),
 | 
						|
          '; ')"/>
 | 
						|
      </report>
 | 
						|
    </rule>
 | 
						|
    
 | 
						|
    <!-- Elsewhere, all namespaces given must correspond with those
 | 
						|
      on the parent -->
 | 
						|
    <rule context="*">
 | 
						|
      <assert test="every $n in (namespace::*) satisfies
 | 
						|
        exists(../namespace::*[deep-equal(.,$n)])">
 | 
						|
        Namespace may not be declared here.
 | 
						|
      </assert>
 | 
						|
      <assert test="every $n in (../namespace::*) satisfies
 | 
						|
        exists(namespace::*[deep-equal(.,$n)])">
 | 
						|
        Namespace may not be undeclared here.
 | 
						|
      </assert>
 | 
						|
    </rule>
 | 
						|
  </pattern>
 | 
						|
  
 | 
						|
  <xsl:function name="m:label" as="xs:string">
 | 
						|
    <xsl:param name="label" as="xs:string"/>
 | 
						|
    <xsl:sequence select="if (string($label)) then concat('''',$label,'''') else '[unprefixed]'"/>
 | 
						|
  </xsl:function>
 | 
						|
  
 | 
						|
</schema> |