<?xml version="1.0" encoding="UTF-8"?>

<!-- 
  Variations/FRBR Project schema release 1.0
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

            xmlns="http://vfrbr.info/vfrbr/1.0"
            targetNamespace="http://vfrbr.info/vfrbr/1.0"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            >

  <!--
    include relation attributes
    -->
  <xsd:include schemaLocation="http://vfrbr.info/schemas/1.0/vfrbr-other-attrib.xsd"/>

  <!--
    otherRelations collector
    for all the Other relationship groups
    -->
  <xsd:element name="otherRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="workToWorkRelations"
                     minOccurs="0" maxOccurs="1"
                     />
        <xsd:element ref="expressionToExpressionRelations"
                     minOccurs="0" maxOccurs="1"
                     />
        <xsd:element ref="expressionToWorkRelations"
                     minOccurs="0" maxOccurs="1"
                     />
        <xsd:element ref="manifestationToManifestationRelations"
                     minOccurs="0" maxOccurs="1"
                     />
        <xsd:element ref="manifestationToItemRelations"
                     minOccurs="0" maxOccurs="1"
                     />
        <xsd:element ref="itemToItemRelations"
                     minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    element declarations
    for the relationship groups
    of the Other kind of relationships
    -->

  <!--
    work to work
    -->
  <xsd:element name="workToWorkRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="hasSuccessor"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasSupplement"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasComplement"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasSummary"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasAdaptation"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasTransformation"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasImitation"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasDependentPart"
                     minOccurs="0" maxOccurs="unbounded"
                     />
        <xsd:element ref="hasIndependentPart"
                     minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    expression to expression
    -->
  <xsd:element name="expressionToExpressionRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element
          ref="hasAbridgement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasRevision"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasTranslation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasArrangement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasSuccessor"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasSupplement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasComplement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasSummary"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasAdaptation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasTransformation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasImitation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasDependentPart"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasIndependentPart"
          minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    expression to work
    -->
  <xsd:element name="expressionToWorkRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element
          ref="hasSuccessor"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasSupplement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasComplement"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasSummary"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasAdaptation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasTransformation"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasImitation"
          minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    manifestation to manifestation
    -->
  <xsd:element name="manifestationToManifestationRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element
          ref="hasReproduction"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasAlternate"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasPart"
          minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    manifestation to item
    -->
  <xsd:element name="manifestationToItemRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element
          ref="hasReproduction"
          minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
    item to item
    -->
  <xsd:element name="itemToItemRelations">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element
          ref="hasReconfiguration"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasReproduction"
          minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element
          ref="hasPart"
          minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
