<?xml version=“1.0” encoding=“UTF-8”?> <schema xmlns=“www.w3.org/2001/XMLSchema” xmlns:oai=“www.openarchives.org/OAI/2.0/” targetNamespace=“www.openarchives.org/OAI/2.0/” elementFormDefault=“qualified” attributeFormDefault=“unqualified”>

    <annotation>
            <documentation>
XML Schema which can be used to validate replies to all OAI-PMH 
v2.0 requests. Herbert Van de Sompel, 2002-05-13.
Validated with XML Spy v.4.3 on 2002-05-13.
Validated with XSV 1.203.2.45/1.106.2.22 on 2002-05-13.
Added definition of protocolVersionType instead of using anonymous 
type. No change of function. Simeon Warner, 2004-03-29.
Tightened definition of UTCdatetimeType to enforce the restriction 
to UTC Z notation. Simeon Warner, 2004-09-14.
Corrected pattern matches for setSpecType and metedataPrefixType
to agree with protocol specification. Simeon Warner, 2004-10-12.
$Date: 2004/10/12 15:20:29 $

Modified by CrossRef due to DOIs containing '\' which does not fit AnyURI
</documentation>
    </annotation>
    <element name="OAI-PMH" type="oai:OAI-PMHtype"/>
    <complexType name="OAI-PMHtype">
            <sequence>
                    <element name="responseDate" type="dateTime"/>
                    <element name="request" type="oai:requestType"/>
                    <element name="requester" minOccurs="0" maxOccurs="1"/>
                    <choice>
                            <element name="error" type="oai:OAI-PMHerrorType" maxOccurs="unbounded"/>
                            <element name="Identify" type="oai:IdentifyType"/>
                            <element name="ListMetadataFormats" type="oai:ListMetadataFormatsType"/>
                            <element name="ListSets" type="oai:ListSetsType"/>
                            <element name="GetRecord" type="oai:GetRecordType"/>
                            <element name="ListIdentifiers" type="oai:ListIdentifiersType"/>
                            <element name="ListRecords" type="oai:ListRecordsType"/>
                    </choice>
            </sequence>
    </complexType>
    <simpleType name="requester">
            <restriction base="string"/>
    </simpleType>

    <complexType name="requestType">
            <annotation>
                    <documentation>Define requestType, indicating the protocol request that 
  led to the response. Element content is BASE-URL, attributes are arguments 
  of protocol request, attribute-values are values of arguments of protocol 
  request</documentation>
            </annotation>
            <simpleContent>
                    <extension base="anyURI">
                            <attribute name="verb" type="oai:verbType" use="optional"/>
                            <attribute name="identifier" type="oai:identifierType" use="optional"/>
                            <attribute name="metadataPrefix" type="oai:metadataPrefixType" use="optional"/>
                            <attribute name="from" type="oai:UTCdatetimeType" use="optional"/>
                            <attribute name="until" type="oai:UTCdatetimeType" use="optional"/>
                            <attribute name="set" type="oai:setSpecType" use="optional"/>
                            <attribute name="resumptionToken" type="string" use="optional"/>
                    </extension>
            </simpleContent>
    </complexType>
    <simpleType name="verbType">
            <restriction base="string">
                    <enumeration value="Identify"/>
                    <enumeration value="ListMetadataFormats"/>
                    <enumeration value="ListSets"/>
                    <enumeration value="GetRecord"/>
                    <enumeration value="ListIdentifiers"/>
                    <enumeration value="ListRecords"/>
            </restriction>
    </simpleType>
    <!-- define OAI-PMH error conditions -->
    <!-- =============================== -->
    <complexType name="OAI-PMHerrorType">
            <simpleContent>
                    <extension base="string">
                            <attribute name="code" type="oai:OAI-PMHerrorcodeType" use="required"/>
                    </extension>
            </simpleContent>
    </complexType>
    <simpleType name="OAI-PMHerrorcodeType">
            <restriction base="string">
                    <enumeration value="cannotDisseminateFormat"/>
                    <enumeration value="idDoesNotExist"/>
                    <enumeration value="badArgument"/>
                    <enumeration value="badVerb"/>
                    <enumeration value="noMetadataFormats"/>
                    <enumeration value="noRecordsMatch"/>
                    <enumeration value="badResumptionToken"/>
                    <enumeration value="noSetHierarchy"/>
            </restriction>
    </simpleType>
    <!-- define OAI-PMH verb containers -->
    <!-- ============================== -->
    <complexType name="IdentifyType">
            <sequence>
                    <element name="repositoryName" type="string"/>
                    <element name="baseURL" type="anyURI"/>
                    <element name="protocolVersion" type="oai:protocolVersionType"/>
                    <element name="adminEmail" type="oai:emailType" maxOccurs="unbounded"/>
                    <element name="earliestDatestamp" type="oai:UTCdatetimeType"/>
                    <element name="deletedRecord" type="oai:deletedRecordType"/>
                    <element name="granularity" type="oai:granularityType"/>
                    <element name="compression" type="string" minOccurs="0" maxOccurs="unbounded"/>
                    <element name="description" type="oai:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
    </complexType>
    <complexType name="ListMetadataFormatsType">
            <sequence>
                    <element name="metadataFormat" type="oai:metadataFormatType" maxOccurs="unbounded"/>
            </sequence>
    </complexType>
    <complexType name="ListSetsType">
            <sequence>
                    <element name="set" type="oai:setType" maxOccurs="unbounded"/>
                    <element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
            </sequence>
    </complexType>
    <complexType name="GetRecordType">
            <sequence>
                    <element name="record" type="oai:recordType"/>
            </sequence>
    </complexType>
    <complexType name="ListRecordsType">
            <sequence>
                    <element name="record" type="oai:recordType" maxOccurs="unbounded"/>
                    <element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
            </sequence>
    </complexType>
    <complexType name="ListIdentifiersType">
            <sequence>
                    <element name="header" type="oai:headerType" maxOccurs="unbounded"/>
                    <element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
            </sequence>
    </complexType>
    <!-- define basic types used in replies to 
   GetRecord, ListRecords, ListIdentifiers -->
    <!-- ======================================= -->
    <complexType name="recordType">
            <annotation>
                    <documentation>A record has a header, a metadata part, and
    an optional about container</documentation>
            </annotation>
            <sequence>
                    <element name="header" type="oai:headerType"/>
                    <element name="metadata" type="oai:metadataType" minOccurs="0"/>
                    <element name="about" type="oai:aboutType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
    </complexType>
    <complexType name="headerType">
            <annotation>
                    <documentation>A header has a unique identifier, a datestamp,
    and setSpec(s) in case the item from which
    the record is disseminated belongs to set(s).
    the header can carry a deleted status indicating
    that the record is deleted.</documentation>
            </annotation>
            <sequence>
                    <element name="identifier" type="oai:identifierType"/>
                    <element name="datestamp" type="oai:UTCdatetimeType"/>
                    <element name="setSpec" type="oai:setSpecType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="status" type="oai:statusType" use="optional"/>
    </complexType>
    <simpleType name="identifierType">
            <restriction base="string"/>
    </simpleType>
    <simpleType name="statusType">
            <restriction base="string">
                    <enumeration value="deleted"/>
            </restriction>
    </simpleType>
    <complexType name="metadataType">
            <annotation>
                    <documentation>Metadata must be expressed in XML that complies
   with another XML Schema (namespace=#other). Metadata must be 
   explicitly qualified in the response.</documentation>
            </annotation>
            <sequence>
                    <any namespace="##other" processContents="strict"/>
            </sequence>
    </complexType>
    <complexType name="aboutType">
            <annotation>
                    <documentation>Data "about" the record must be expressed in XML
  that is compliant with an XML Schema defined by a community.</documentation>
            </annotation>
            <sequence>
                    <any namespace="##other" processContents="strict"/>
            </sequence>
    </complexType>
    <complexType name="resumptionTokenType">
            <annotation>
                    <documentation>A resumptionToken may have 3 optional attributes
   and can be used in ListSets, ListIdentifiers, ListRecords
   responses.</documentation>
            </annotation>
            <simpleContent>
                    <extension base="string">
                            <attribute name="expirationDate" type="dateTime" use="optional"/>
                            <attribute name="completeListSize" type="positiveInteger" use="optional"/>
                            <attribute name="cursor" type="nonNegativeInteger" use="optional"/>
                    </extension>
            </simpleContent>
    </complexType>
    <complexType name="descriptionType">
            <annotation>
                    <documentation>The descriptionType is used for the description
  element in Identify and for setDescription element in ListSets.
  Content must be compliant with an XML Schema defined by a 
  community.</documentation>
            </annotation>
            <sequence>
                    <any namespace="##other" processContents="strict"/>
            </sequence>
    </complexType>
    <simpleType name="UTCdatetimeType">
            <annotation>
                    <documentation>Datestamps are to either day (type date)
  or to seconds granularity (type oai:UTCdateTimeZType)</documentation>
            </annotation>
            <union memberTypes="date oai:UTCdateTimeZType"/>
    </simpleType>
    <simpleType name="UTCdateTimeZType">
            <restriction base="dateTime">
                    <pattern value=".*Z"/>
            </restriction>
    </simpleType>
    <!-- define types used for Identify verb only -->
    <!-- ======================================== -->
    <simpleType name="protocolVersionType">
            <restriction base="string">
                    <enumeration value="2.0"/>
            </restriction>
    </simpleType>
    <simpleType name="emailType">
            <restriction base="string">
                    <pattern value="\S+@(\S+\.)+\S+"/>
            </restriction>
    </simpleType>
    <simpleType name="deletedRecordType">
            <restriction base="string">
                    <enumeration value="no"/>
                    <enumeration value="persistent"/>
                    <enumeration value="transient"/>
            </restriction>
    </simpleType>
    <simpleType name="granularityType">
            <restriction base="string">
                    <enumeration value="YYYY-MM-DD"/>
                    <enumeration value="YYYY-MM-DDThh:mm:ssZ"/>
            </restriction>
    </simpleType>
    <!-- define types used for ListMetadataFormats verb only -->
    <!-- =================================================== -->
    <complexType name="metadataFormatType">
            <sequence>
                    <element name="metadataPrefix" type="oai:metadataPrefixType"/>
                    <element name="schema" type="anyURI"/>
                    <element name="metadataNamespace" type="anyURI"/>
            </sequence>
    </complexType>
    <simpleType name="metadataPrefixType">
            <restriction base="string">
                    <pattern value="[A-Za-z0-9\-_\.!~\*'\(\)]+"/>
            </restriction>
    </simpleType>
    <!-- define types used for ListSets verb -->
    <!-- =================================== -->
    <complexType name="setType">
            <sequence>
                    <element name="setSpec" type="oai:setSpecType"/>
                    <element name="setName" type="string"/>
                    <element name="setDescription" type="oai:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
    </complexType>
    <simpleType name="setSpecType">
            <restriction base="string">
                    <pattern value="([A-Za-z0-9\-_\.!~\*'\(\)])+(:[A-Za-z0-9\-_\.!~\*'\(\)]+)*"/>
            </restriction>
    </simpleType>

</schema>