<?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/efrbr/1.0"
            targetNamespace="http://vfrbr.info/efrbr/1.0"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            >

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

  <!--
    otherRelations collector
    for all the Other relationships
    -->
  <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"
                     />
        <!-- whole/part -->
        <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>
        <!-- related work is not the work of this expression -->
        <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>
