<?xml version="1.0" encoding="UTF-8"?>
<!-- This is the schema for the XML patch errors defined in RFC 5261
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="urn:ietf:params:xml:ns:patch-ops-error"
            targetNamespace="urn:ietf:params:xml:ns:patch-ops-error"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">

  <!-- This import brings in the XML language attribute xml:lang-->
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
              schemaLocation="http://www.w3.org/2001/xml.xsd"/>

  <!-- ROOT document element for signaling patch-ops errors -->
  <xsd:element name="patch-ops-error">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##any" processContents="lax"
                 minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:anyAttribute processContents="lax"/>
    </xsd:complexType>
  </xsd:element>

  <!-- patch-ops error elements:
       not intended to be used as root documnet elements -->
  <xsd:element name="invalid-attribute-value"
               type="tns:patch-error"/>
  <xsd:element name="invalid-character-set"
               type="tns:patch-error-simple"/>
  <xsd:element name="invalid-diff-format"
               type="tns:patch-error-simple"/>
  <xsd:element name="invalid-entity-declaration"
               type="tns:patch-error"/>
  <xsd:element name="invalid-namespace-prefix"
               type="tns:patch-error"/>
  <xsd:element name="invalid-namespace-uri"
               type="tns:patch-error"/>
  <xsd:element name="invalid-node-types"
               type="tns:patch-error"/>
  <xsd:element name="invalid-patch-directive"
               type="tns:patch-error"/>
  <xsd:element name="invalid-root-element-operation"
               type="tns:patch-error"/>
  <xsd:element name="invalid-xml-prolog-operation"
               type="tns:patch-error"/>
  <xsd:element name="invalid-whitespace-directive"
               type="tns:patch-error"/>
  <xsd:element name="unlocated-node"
               type="tns:patch-error"/>
  <xsd:element name="unsupported-id-function"
               type="tns:patch-error"/>
  <xsd:element name="unsupported-xml-id"
               type="tns:patch-error"/>

  <!-- simple patch-ops error type  -->
  <xsd:complexType name="patch-error-simple">
    <xsd:attribute name="phrase" type="xsd:string"/>
    <xsd:attribute ref="xml:lang"/>
    <xsd:anyAttribute processContents="lax"/>
  </xsd:complexType>

  <!-- error type which includes patch operation -->
  <xsd:complexType name="patch-error">
    <xsd:sequence>
      <xsd:any namespace="##any" processContents="lax"/>
    </xsd:sequence>
    <xsd:attribute name="phrase" type="xsd:string"/>
    <xsd:attribute ref="xml:lang"/>
    <xsd:anyAttribute processContents="lax"/>
  </xsd:complexType>
</xsd:schema>