<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/">
  <start>
    <ref name="DescriptionSet" />
  </start>
  
  <define name="DescriptionSet">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p>A DC-DS-XML Description Set Element may contain one or more DC-DS-XML Description Elements.</p>
      <p>A DC-DS-XML Description Set Element may also have XML attributes, the names of which may be from any other XML namespace.</p>
    </div>
    <element name="descriptionSet">
      <oneOrMore>
        <ref name="Description" />
      </oneOrMore>
      <zeroOrMore>
        <attribute>
          <anyName>
            <except><nsName /></except>
          </anyName>
        </attribute>
      </zeroOrMore>
    </element>
  </define>


  <define name="Description">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p>A DC-DS-XML Description Element may contain one or more DC-DS-XML Statement Elements.</p>
      <p>A DC-DS-XML Description Element may also have either a dcxf:resourceURI or a dcxf:resourceId attribute.</p>
      <p>A DC-DS-XML Description Element may also have other XML attributes, the names of which may be from any other XML namespace.</p>
    </div>
    <element name="description">
      <oneOrMore>
        <ref name="Statement" />
      </oneOrMore>
      <optional>
        <ref name="ResourceURI" />
      </optional>
      <zeroOrMore>
        <attribute>
          <anyName>
            <except><nsName /></except>
          </anyName>
        </attribute>
      </zeroOrMore>
    </element>
  </define>

  <define name="ResourceURI">
        <choice>
          <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="resourceURI">
            <data type="anyURI" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />
          </attribute>
          <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="resourceId" />
        </choice>
  </define>

  <define name="Statement">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p>A DC-DS-XML Statement Element may contain Value String Elements.</p>
      <p>A DC-DS-XML Statement Element must have also have a dcxf:propertyURI attribute.</p>
      <p>A DC-DS-XML Statement Element may also have either a dcxf:valueURI or dcxf:valueRef attribute.</p>
      <p>A DC-DS-XML Statement Element may also have either a dcxf:vesURI attribute.</p>
      <p>A DC-DS-XML Statement Element may also have other XML attributes, the names of which may be from any other XML namespace.</p>
    </div>
    <element name="statement">
      <choice>
        <zeroOrMore>
          <ref name="NonLiteralValueString" />
        </zeroOrMore>
        <optional>
          <ref name="LiteralValueString" />
        </optional>
      </choice>
      <ref name="PropertyURI" />
      <optional>
        <ref name="NonLiteralValueSurrogate" />
      </optional>
      <zeroOrMore>
        <attribute>
          <anyName>
            <except><nsName /></except>
          </anyName>
        </attribute>
      </zeroOrMore>
    </element>
  </define>

  <define name="PropertyURI">
    <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="propertyURI">
      <data type="anyURI" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />
    </attribute>
  </define>

  <define name="NonLiteralValueSurrogate">
      <optional>
        <ref name="VesURI" />
      </optional>
      <optional>
        <ref name="ValueURI" />
      </optional>
  </define>

  <define name="VesURI">
    <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="vesURI">
      <data type="anyURI" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />
    </attribute>
  </define>

  <define name="ValueURI">
        <choice>
          <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="valueURI">
            <data type="anyURI" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />
          </attribute>
          <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="valueRef" />
        </choice>
  </define>

  <define name="NonLiteralValueString">
    <element name="valueString">
      <ref name="ValueString" />
      <zeroOrMore>
        <attribute>
          <anyName>
            <except>
              <name>xml:lang</name>
              <nsName />
            </except>
          </anyName>
        </attribute>
      </zeroOrMore>
    </element>
  </define>

  <define name="LiteralValueString">
    <element name="literalValueString">
      <ref name="ValueString" />
      <zeroOrMore>
        <attribute>
          <anyName>
            <except>
              <name>xml:lang</name>
              <nsName />
            </except>
          </anyName>
        </attribute>
      </zeroOrMore>
    </element>
  </define>
  
  <define name="ValueString">
    <choice>
      <ref name="PlainValueString" />
      <ref name="TypedValueString" />
    </choice>
  </define>

  <define name="PlainValueString">
      <ref name="PlainLiteralContent" />
      <optional>
          <attribute name="xml:lang" />
      </optional>
  </define>

  <define name="TypedValueString">
      <ref name="TypedLiteralContent" />
      <ref name="SesURI" />
  </define>

  <define name="PlainLiteralContent">
    <text />
  </define>

  <define name="TypedLiteralContent">
      <interleave>
        <zeroOrMore>
          <text />
        </zeroOrMore>
        <zeroOrMore>
          <element>
            <anyName />
            <ref name="TypedLiteralContent" />
            <zeroOrMore>
              <attribute>
                <anyName />
              </attribute>
            </zeroOrMore>
          </element>
        </zeroOrMore>
      </interleave>
  </define>

  <define name="SesURI">
    <attribute ns="http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/" name="sesURI">
      <data type="anyURI" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />
    </attribute>
  </define>

</grammar>
