<?xml version="1.0" encoding="UTF-8"?>
<tbody>
  <tr>
    <th>Id</th>
    <th>Pattern</th>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AnyURIAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:anyURI')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AnyURIElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:anyURI')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AttributeFormUnqualified"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute[@form='unqualified']/
		(@form)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AttributeOptional"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute[@use = 'optional']/ 
		(@use)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AttributeReference"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute[@ref and contains(@ref, ":")]/
	    (., @ref)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-AttributeTypeReference"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute[@name and @type 
	    and namespace-uri-from-QName(resolve-QName(@type,.)) != 'http://www.w3.org/2001/XMLSchema' 
	    and contains(@type, ':')]/
	    (., @name, @type)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-Base64BinaryElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:base64Binary')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-BooleanAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:boolean')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-BooleanElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:boolean')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ByteAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:byte')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ByteElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:byte')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ComplexTypeAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:complexType/xs:attribute[@name]/
		(., @name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ComplexTypeAttributeExtension"/>
    </td>
    <td>
      <xpath-summary>.//xs:complexType/xs:complexContent[xs:extension[@base]/xs:attribute]/
		(., xs:extension/(., @base, xs:attribute/(., @name)))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ComplexTypeConcrete"/>
    </td>
    <td>
      <xpath-summary>.//xs:complexType[@abstract='false']/
		(@abstract)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ComplexTypeSequence"/>
    </td>
    <td>
      <xpath-summary>.//xs:complexType/xs:sequence/
		(., xs:element/(., @name))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ComplexTypeSequenceExtension"/>
    </td>
    <td>
      <xpath-summary>.//xs:complexType/xs:complexContent[xs:extension[@base]/xs:sequence]/
		(., xs:extension/
		(., @base, xs:sequence/(., xs:element/(., @name))))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-DateTimeAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:dateTime')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-DateTimeElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:dateTime')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-DocumentationElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:annotation/xs:documentation/
		(.., ., .//*, .//@*)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-DoubleAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:double')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-DoubleElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:double')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementEmptyComplexType"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@name]/xs:complexType[not(node())]/
	    (., .., ../@name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementEmptySequence"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@name]/xs:complexType/xs:sequence[not(node())]/
	    (., .., ../.., ../../@name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementFormQualified"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@form='qualified']/
		(@form)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementMaxOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[(not(@minOccurs) or @minOccurs = '1') and @maxOccurs = '1']/
		(@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementMinOccurs0"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@minOccurs = '0' and (not(@maxOccurs) or @maxOccurs = '1')]/
		(@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementMinOccurs0MaxOccursUnbounded"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@minOccurs = '0' and @maxOccurs = 'unbounded']/
		(@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementMinOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@minOccurs = '1' and (not(@maxOccurs) or @maxOccurs = '1')]/
		(@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementMinOccurs1MaxOccursUnbounded"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[(not(@minOccurs) or @minOccurs = '1') and @maxOccurs = 'unbounded']/
		(@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementReference"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@ref and contains(@ref, ':')]/
	    (., @ref)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ElementTypeReference"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@name and @type 
	    and namespace-uri-from-QName(resolve-QName(@type,.)) != 'http://www.w3.org/2001/XMLSchema' 
	    and contains(@type, ':')]/
	    (., @name, @type)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalAttribute"/>
    </td>
    <td>
      <xpath-summary>./xs:attribute[@name and @type and contains(@type, ":")]/
		(., @name, @type)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalComplexType"/>
    </td>
    <td>
      <xpath-summary>./xs:complexType[@name]/
		(., @name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalElement"/>
    </td>
    <td>
      <xpath-summary>./xs:element[@name 
		and @type and contains(@type, ':')]/
		(., @name, @type)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalElementComplexType"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[parent::xs:schema]/xs:complexType / (.,..)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalElementConcrete"/>
    </td>
    <td>
      <xpath-summary>./xs:element[@abstract='false']/
		(@abstract)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalElementSequence"/>
    </td>
    <td>
      <xpath-summary>./xs:element[@name]/xs:complexType/xs:sequence[xs:element]/
		(../../(., @name), .., ., xs:element/(., @name))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-GlobalSimpleType"/>
    </td>
    <td>
      <xpath-summary>./xs:simpleType[@name]/
		(., @name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-Id"/>
    </td>
    <td>
      <xpath-summary>.//@id</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-IdentifierName"/>
    </td>
    <td>
      <xpath-summary>.//.[matches(@name, "^[A-Za-z_]([A-Za-z0-9_]{0,31})$")]/
		(@name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ImportNamespace"/>
    </td>
    <td>
      <xpath-summary>./xs:import[@namespace and not(@schemaLocation)
		and not(@namespace = 'http://www.w3.org/2001/XMLSchema')]/
		(., @namespace)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ImportSchema"/>
    </td>
    <td>
      <xpath-summary>./xs:import[@namespace and @schemaLocation]/
		(., @namespace, @schemaLocation)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ImportTypesNamespace"/>
    </td>
    <td>
      <xpath-summary>.//xs:import[@namespace
		and not(@schemaLocation) 
		and (@namespace = ../../xs:schema/@targetNamespace)]/ 
		(., @namespace)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-Include"/>
    </td>
    <td>
      <xpath-summary>./xs:include[@schemaLocation]/
		(., @schemaLocation)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-IntAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:int')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-IntElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:int')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-LocalElementComplexType"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[not(parent::xs:schema)]/xs:complexType</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-LongAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:long')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-LongElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:long')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-MaxOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//.[@maxOccurs = '1']/
		(@maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-MinOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//.[@minOccurs = '1']/
		(@minOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NCNameAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:NCName')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NCNameElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:NCName')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NameAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:Name')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NameElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:Name')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NillableElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@nillable = 'true' and not(@minOccurs = '0')]/
	    (@nillable)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NonIdentifierName"/>
    </td>
    <td>
      <xpath-summary>.//.[@name and not(matches(@name, "^[A-Za-z_]([A-Za-z0-9_]{0,31})$"))]/
		(@name)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NonNegativeIntegerAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:nonNegativeInteger')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NormalizedStringAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:normalizedString')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NormalizedStringElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:normalizedString')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NotMixed"/>
    </td>
    <td>
      <xpath-summary>.//.[@mixed = 'false']/
		(@mixed)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NotNillableElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element[@nillable = 'false']/
	    (@nillable)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-NullEnumerationType"/>
    </td>
    <td>
      <xpath-summary>.//xs:simpleType/xs:restriction[@base/resolve-QName(.,..) = xs:QName('xs:string') 
		and count(xs:enumeration) le 1 and xs:enumeration = '']/
		(@base, xs:enumeration/(., @value))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-PositiveIntegerAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:positiveInteger')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-PositiveIntegerElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:positiveInteger')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-QNameAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:QName')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-QNameElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:QName')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-QualifiedLocalElements"/>
    </td>
    <td>
      <xpath-summary>.[@elementFormDefault = 'qualified']/
		(@elementFormDefault)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-SchemaVersion"/>
    </td>
    <td>
      <xpath-summary>./@version</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-SequenceElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:sequence/xs:element/(.)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-SequenceMaxOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//xs:sequence[(not(@minOccurs) or @minOccurs = '1') and @maxOccurs = '1']/
		 (@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-SequenceMinOccurs1"/>
    </td>
    <td>
      <xpath-summary>.//xs:sequence[@minOccurs = '1' and (not(@maxOccurs) or @maxOccurs = '1')]/
		 (@minOccurs, @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-SequenceSingleRepeatedElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:sequence[count(xs:element) = 1]/xs:element[@maxOccurs = 'unbounded']/
		(., @maxOccurs)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ShortAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:short')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-ShortElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:short')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-StringAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:string')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-StringElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:string')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-StringEnumerationType"/>
    </td>
    <td>
      <xpath-summary>.//xs:simpleType/xs:restriction[@base/resolve-QName(.,..) = xs:QName('xs:string') and xs:enumeration]/
		(., @base, xs:enumeration/(., @value))</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-TargetNamespace"/>
    </td>
    <td>
      <xpath-summary>.[@targetNamespace]/
		(., @targetNamespace)</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-TokenAttribute"/>
    </td>
    <td>
      <xpath-summary>.//xs:attribute/@type[resolve-QName(.,..) = xs:QName('xs:token')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-TokenElement"/>
    </td>
    <td>
      <xpath-summary>.//xs:element/@type[resolve-QName(.,..) = xs:QName('xs:token')]</xpath-summary>
    </td>
  </tr>
  <tr>
    <td>
      <pattern-summary ref="pattern-UnqualifiedLocalAttributes"/>
    </td>
    <td>
      <xpath-summary>.[not(@attributeFormDefault) or @attributeFormDefault = 'unqualified']/
		(., @attributeFormDefault)</xpath-summary>
    </td>
  </tr>
</tbody>

