title: XML more specific validation through xsd assert
body: <p>this is an schema that i need to improve to validate  by an assert that if <code>rule/type</code> has a value of <code>A</code> or  <code>B</code> then <code>Return = true</code>
  in something like:</p>
  
  <pre><code>&lt;xsd:assert test="if (@type$value = A or @type$value= B) then @return$value = true" /&gt;
  </code></pre>
  
  <p>this is the XSD that I already have been working :</p>
  
  <pre><code>&lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;xsd:simpleType name="Rule"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="A"/&gt;
          &lt;xsd:enumeration value="B"/&gt;
          &lt;xsd:enumeration value="C"/&gt;
          &lt;xsd:enumeration value="D"/&gt;
          &lt;xsd:enumeration value="E"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:simpleType name="cType"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="C-val1"/&gt;
          &lt;xsd:enumeration value="C-val2"/&gt;
          &lt;xsd:enumeration value="C-val3"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:simpleType name="DType"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="D-val1"/&gt;
          &lt;xsd:enumeration value="D-val2"/&gt;
          &lt;xsd:enumeration value="D-val3"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:element name="Rule"&gt;
      &lt;xsd:complexType&gt;
          &lt;xsd:complexContent&gt;
              &lt;xsd:restriction base="xsd:anyType"&gt;
                  &lt;xsd:sequence&gt;
                      &lt;xsd:element name="Type" type="Rule"/&gt;
                      &lt;xsd:element name="Return" type="xsd:boolean"/&gt;
                      &lt;xsd:choice&gt;
                          &lt;xsd:element name="BConfig"/&gt;
                          &lt;xsd:element name="AConfig"/&gt;
                          &lt;xsd:element name="CConfig" type="CRule"/&gt;
                          &lt;xsd:element name="DConfig" type="DRule"/&gt;
                          &lt;xsd:element name="EElement" type="xsd:integer"/&gt;
                      &lt;/xsd:choice&gt;
                  &lt;/xsd:sequence&gt;
              &lt;/xsd:restriction&gt;
          &lt;/xsd:complexContent&gt;
      &lt;/xsd:complexType&gt;
  &lt;/xsd:element&gt;
  &lt;xsd:complexType name="CRule"&gt;
      &lt;xsd:complexContent&gt;
          &lt;xsd:restriction base="xsd:anyType"&gt;
              &lt;xsd:sequence&gt;
                  &lt;xsd:element name="C" type="CType" maxOccurs="3" /&gt;
              &lt;/xsd:sequence&gt;
          &lt;/xsd:restriction&gt;
      &lt;/xsd:complexContent&gt;
  &lt;/xsd:complexType&gt;
  &lt;xsd:complexType name="DRule"&gt;
      &lt;xsd:complexContent&gt;
          &lt;xsd:restriction base="xsd:anyType"&gt;
              &lt;xsd:sequence&gt;
                  &lt;xsd:element name="D" type="DType" maxOccurs="3" /&gt;
              &lt;/xsd:sequence&gt;
          &lt;/xsd:restriction&gt;
      &lt;/xsd:complexContent&gt;
  &lt;/xsd:complexType&gt;
  </code></pre>
  
  <p></p>
  
  <p>But don't know how to use asset correctly </p>
  
  <p>UPDATE 1:</p>
  
  <p>following  sergiofc this is the updated schema</p>
  
  <pre><code>&lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;xsd:simpleType name="Rule"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="A"/&gt;
          &lt;xsd:enumeration value="B"/&gt;
          &lt;xsd:enumeration value="C"/&gt;
          &lt;xsd:enumeration value="D"/&gt;
          &lt;xsd:enumeration value="E"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:simpleType name="cType"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="C-val1"/&gt;
          &lt;xsd:enumeration value="C-val2"/&gt;
          &lt;xsd:enumeration value="C-val3"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:simpleType name="DType"&gt;
      &lt;xsd:restriction base="xsd:string"&gt;
          &lt;xsd:enumeration value="D-val1"/&gt;
          &lt;xsd:enumeration value="D-val2"/&gt;
          &lt;xsd:enumeration value="D-val3"/&gt;
      &lt;/xsd:restriction&gt;
  &lt;/xsd:simpleType&gt;
  &lt;xsd:element name="Rule"&gt;
      &lt;xsd:complexType&gt;
          &lt;xsd:complexContent&gt;
              &lt;xsd:restriction base="xsd:anyType"&gt;
                  &lt;xsd:sequence&gt;
                      &lt;xsd:element name="Type" type="Rule"/&gt;
                      &lt;xsd:element name="Return" type="xsd:boolean"/&gt;
                      &lt;xsd:choice&gt;
                          &lt;xsd:element name="BConfig"/&gt;
                          &lt;xsd:element name="AConfig"/&gt;
                          &lt;xsd:element name="CConfig" type="CRule"/&gt;
                          &lt;xsd:element name="DConfig" type="DRule"/&gt;
                          &lt;xsd:element name="EElement" type="xsd:integer"/&gt;
                      &lt;/xsd:choice&gt;
                  &lt;/xsd:sequence&gt;
                  &lt;xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/&gt;
              &lt;/xsd:restriction&gt;
          &lt;/xsd:complexContent&gt;
      &lt;/xsd:complexType&gt;
  &lt;/xsd:element&gt;
  &lt;xsd:complexType name="CRule"&gt;
      &lt;xsd:complexContent&gt;
          &lt;xsd:restriction base="xsd:anyType"&gt;
              &lt;xsd:sequence&gt;
                  &lt;xsd:element name="C" type="CType" maxOccurs="3" /&gt;
              &lt;/xsd:sequence&gt;
          &lt;/xsd:restriction&gt;
      &lt;/xsd:complexContent&gt;
  &lt;/xsd:complexType&gt;
  &lt;xsd:complexType name="DRule"&gt;
      &lt;xsd:complexContent&gt;
          &lt;xsd:restriction base="xsd:anyType"&gt;
              &lt;xsd:sequence&gt;
                  &lt;xsd:element name="D" type="DType" maxOccurs="3" /&gt;
              &lt;/xsd:sequence&gt;
          &lt;/xsd:restriction&gt;
      &lt;/xsd:complexContent&gt;
  &lt;/xsd:complexType&gt;
  </code></pre>
  
  <p></p>
  
  <p>but i still don't know where to locate the <code>xsd:assert</code>, i'm still getting the same error.</p>