sul-dlss/modsulator-app-rails

View on GitHub
app/services/mods-3-6.xsd

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8"?>
<!--  Editor:  Ray Denenberg, Library of Congress; rden@loc.gov -->
<xs:schema xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.loc.gov/mods/v3" targetNamespace="http://www.loc.gov/mods/v3" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <!-- -->
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
    <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
    <!--
MODS: Metadata Object Description Schema. See http://www.loc.gov/standards/mods/

          ****************************************************************
         *
         *                            MODS 3.6
         *
         *                           May 5, 2015
         *
          *****************************************************************w


***************************************************
Changes in version 3.6
1. nonSort definition revised in 3.6. to add attribute @xml:space.

2. HierarchicalGeographic enhancements.
      - <province> depricated in favor of <state>  (<state> re-defined in guidelines)
      - Attributes @areaType, @regionType, and @citySectionType
        defined for elements <area>, <region>, and <citySection>
      - Attribute @level defined for all place type elements to indicate hierarchical level.
      - Authority attributeGroup added to all place type elements.
      - Attribute @period defined. Indicates that the described entity once existed but no longer exists.

3. Four new attributes for <relatedItem>
    •    @otherType
    •    @otherTypeAuth
    •    @otherTypeAuthURI
    •    @otherTypeURI


4. New element <nameIdentifier>, subelement of <name>, re-using the existing <identifier> definition


5. <cartographics>(subelement of <subject>) is made extensible.


6. New element <recordInfoNote>, subelement of <recordInfo>, re-using the existing <note> definition

7.  New element <itemIdentifier>, subelement of <location><physicalLocation><holdingSimple><copyInformation>
    with attribute @type, for example:
            <itemIdentifer   type="barcode">
            <itemIdentifier  type="copyNumber">
            <itemIdentifier  type="accessionNumber">

*********************************************************************************************

     *************************************
     Organization of this schema
     *************************************
The schema has three parts:

1.   Structural declarations and definitions
2.    Elements (top level elements  and their subelements)
3.   Auxiliary Definitions

         ***********************************************************************
         ***********************************************************************
         Part 1:    Structural Declarations and Definitions
         ***********************************************************************
         ***********************************************************************
- Definition of a single MODS record  and a MODS collection
- modsGroup, listing the top level MODS elements

***********************************************************************
**      Definition of a single MODS record                           **
**********************************************************************
-->
    <xs:element name="mods" type="modsDefinition"/>
    <!--  -->
    <xs:complexType name="modsDefinition">
        <xs:group ref="modsGroup" maxOccurs="unbounded"/>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attribute name="version">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="3.6"/>
                    <xs:enumeration value="3.5"/>
                    <xs:enumeration value="3.4"/>
                    <xs:enumeration value="3.3"/>
                    <xs:enumeration value="3.2"/>
                    <xs:enumeration value="3.1"/>
                    <xs:enumeration value="3.0"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <!--
***********************************************************************
**      Definition of a MODS collection                                **
**********************************************************************
-->
    <xs:element name="modsCollection" type="modsCollectionDefinition"/>
    <!-- -->
    <xs:complexType name="modsCollectionDefinition">
        <xs:sequence>
            <xs:element ref="mods" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <!--

************************************************
**      Group Definition
***********************************************
This forms the basis of the mods record definition, and also relatedItem.
The difference between a MODS record and a relatedItem
(as they pertain to their usage of the group definition)
is that mods requires at least one element and relatedItem does not.
The group definition is used by both, where relatedItem says
minOccurs="0" and for the mods record definition minOccurs="1" (default).

-->
    <xs:group name="modsGroup">
        <xs:choice>
            <!--
***********************************************************************
**        These are the "top level" MODS elements               **
**********************************************************************
-->
            <xs:element ref="abstract"/>
            <xs:element ref="accessCondition"/>
            <xs:element ref="classification"/>
            <xs:element ref="extension"/>
            <xs:element ref="genre"/>
            <xs:element ref="identifier"/>
            <xs:element ref="language"/>
            <xs:element ref="location"/>
            <xs:element ref="name"/>
            <xs:element ref="note"/>
            <xs:element ref="originInfo"/>
            <xs:element ref="part"/>
            <xs:element ref="physicalDescription"/>
            <xs:element ref="recordInfo"/>
            <xs:element ref="relatedItem"/>
            <xs:element ref="subject"/>
            <xs:element ref="tableOfContents"/>
            <xs:element ref="targetAudience"/>
            <xs:element ref="titleInfo"/>
            <xs:element ref="typeOfResource"/>
            <!--
End list of "top level" MODS elements
-->
        </xs:choice>
    </xs:group>
    <!--
        ***********************************************************************
        ***********************************************************************
       Part 2:   Elements (top level elements and their subelements)
       ************************************************************************
        ***********************************************************************
-->
    <!--
*********************************************
*   Top Level Element <abstract>       *
*********************************************
 -->
    <xs:element name="abstract" type="abstractDefinition"/>
    <!-- -->
    <xs:complexType name="abstractDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attribute name="shareable" fixed="no"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attributeGroup ref="altFormatAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--

****************************************************
*   Top Level Element <accessCondition>       *
*****************************************************
 -->
    <xs:element name="accessCondition" type="accessConditionDefinition"/>
    <!-- -->
    <xs:complexType name="accessConditionDefinition" mixed="true">
        <xs:complexContent mixed="true">
            <xs:extension base="extensionDefinition">
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attributeGroup ref="languageAttributeGroup"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attributeGroup ref="altFormatAttributeGroup"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <classification>          *
*****************************************************
-->
    <xs:element name="classification" type="classificationDefinition"/>
    <!-- -->
    <xs:complexType name="classificationDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="edition" type="xs:string"/>
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attribute name="usage" fixed="primary"/>
                <xs:attribute name="generator" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <extension>              *
*****************************************************
 -->
    <xs:element name="extension" type="extensionDefinition"/>
    <!-- -->
    <xs:complexType name="extensionDefinition" mixed="true">
        <xs:sequence>
            <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="displayLabel" type="xs:string"/>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <genre>                    *
*****************************************************
-->
    <xs:element name="genre" type="genreDefinition"/>
    <!-- -->
    <xs:complexType name="genreDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="type" type="xs:string"/>
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attribute name="usage" fixed="primary"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <identifier>                  *
*****************************************************
-->
    <xs:element name="identifier" type="identifierDefinition"/>
    <!-- -->
    <xs:complexType name="identifierDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attribute name="typeURI" type="xs:anyURI"/>
                <xs:attribute name="invalid" fixed="yes"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <language>                *
*****************************************************
-->
    <xs:element name="language" type="languageDefinition"/>
    <!-- -->
    <xs:complexType name="languageDefinition">
        <xs:sequence>
            <xs:element ref="languageTerm" maxOccurs="unbounded"/>
            <xs:element ref="scriptTerm" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="objectPart" type="xs:string"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
        <xs:attribute name="usage" fixed="primary"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <language>
 -->
    <xs:element name="languageTerm" type="languageTermDefinition"/>
    <!-- -->
    <xs:complexType name="languageTermDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="authorityURI" type="xs:anyURI"/>
                <xs:attribute name="valueURI" type="xs:anyURI"/>
                <xs:attribute name="authority">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="rfc3066"/>
                            <xs:enumeration value="iso639-2b"/>
                            <xs:enumeration value="iso639-3"/>
                            <xs:enumeration value="rfc4646"/>
                            <xs:enumeration value="rfc5646"/>
                            <!-- -->
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="type" type="codeOrText"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
*****************scriptTerm ************************
-->
    <xs:element name="scriptTerm" type="scriptTermDefinition"/>
    <!-- -->
    <xs:complexType name="scriptTermDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="type" type="codeOrText"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--

****************************************************
*   Top Level Element <location>                 *
*****************************************************
 -->
    <xs:element name="location" type="locationDefinition"/>
    <!-- -->
    <xs:complexType name="locationDefinition">
        <xs:sequence>
            <xs:element ref="physicalLocation" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="shelfLocator" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="url" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="holdingSimple" minOccurs="0"/>
            <xs:element ref="holdingExternal" minOccurs="0"/>
        </xs:sequence>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <location>
 -->
    <!--
********** physicalLocation **********
-->
    <xs:element name="physicalLocation" type="physicalLocationDefinition"/>
    <!-- -->
    <xs:complexType name="physicalLocationDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- -->
    <xs:element name="shelfLocator" type="stringPlusLanguage"/>
    <!--
********** holdingSimple **********
 -->
    <xs:element name="holdingSimple" type="holdingSimpleDefinition"/>
    <!-- -->
    <xs:complexType name="holdingSimpleDefinition">
        <xs:sequence>
            <xs:element ref="copyInformation" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <!--
**********copyInformation **********
 -->
    <xs:element name="copyInformation" type="copyInformationDefinition"/>
    <!-- -->
    <xs:complexType name="copyInformationDefinition">
        <xs:sequence>
            <xs:element ref="form" minOccurs="0"/>
            <xs:element ref="subLocation" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="shelfLocator" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="electronicLocator" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="note" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="stringPlusLanguage">
                            <xs:attribute name="displayLabel" type="xs:string"/>
                            <xs:attribute name="type" type="xs:string"/>
                            <xs:attributeGroup ref="xlink:simpleLink"/>
                            <xs:attribute name="ID" type="xs:ID"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element ref="enumerationAndChronology" minOccurs="0" maxOccurs="unbounded"/>
            <!--
         ******************the following element <itemIdentifer> added in 3.6   -->
            <xs:element ref="itemIdentifier" minOccurs="0" maxOccurs="unbounded"/>
            <!--    -->
        </xs:sequence>
    </xs:complexType>


        <!-- following definition is new in 3.6 -->
        <xs:element name="itemIdentifier" type="itemIdentifierDefinition"/>
            <xs:complexType name="itemIdentifierDefinition">
                <xs:simpleContent>
                    <xs:extension base="stringPlusLanguage">
                        <xs:attribute name="type" type="xs:string"/>
                    </xs:extension>
                </xs:simpleContent>
            </xs:complexType>
    <!--
**********form**********
 -->
    <xs:element name="form" type="formDefinition"/>
    <!-- -->
    <xs:complexType name="formDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- -->
    <xs:element name="subLocation" type="stringPlusLanguage"/>
    <xs:element name="electronicLocator" type="stringPlusLanguage"/>
    <!--
**********enumerationAndChronology  **********
     -->
    <xs:element name="enumerationAndChronology" type="enumerationAndChronologyDefinition"/>
    <!-- -->
    <xs:complexType name="enumerationAndChronologyDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="unitType">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="1"/>
                            <xs:enumeration value="2"/>
                            <xs:enumeration value="3"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
 ********** url  **********
     -->
    <xs:element name="url" type="urlDefinition"/>
    <!-- -->
    <xs:complexType name="urlDefinition">
        <xs:simpleContent>
            <xs:extension base="xs:anyURI">
                <xs:attribute name="dateLastAccessed" type="xs:string"/>
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="note" type="xs:string"/>
                <xs:attribute name="access">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="preview"/>
                            <xs:enumeration value="raw object"/>
                            <xs:enumeration value="object in context"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="usage">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="primary display"/>
                            <xs:enumeration value="primary"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- -->
    <xs:element name="holdingExternal" type="extensionDefinition"/>
    <!--
****************************************************
*   Top Level Element <name>                 *
*****************************************************
-->
    <xs:element name="name" type="nameDefinition"/>
    <!-- -->
    <xs:complexType name="nameDefinition">
        <xs:choice>

            <!-- this choice give two ways to do this.
                The second way allows the element <etal>,  to express "et. al."

Choice one. WITHOUT <etal>.
-->
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="namePart"/>
                <xs:element ref="displayForm"/>
                <xs:element ref="affiliation"/>
                <xs:element ref="role"/>
                <xs:element ref="description"/>
            <!--
                the following element, <nameIdentifier>, is introduced in version 3.6,
                to allow the inclusion of an identifier for the object named by this <name>.
                It is typed as "indentifierDefinition", the same definition that
                top-level element <identifier> uses.
                -->
                <xs:element ref="nameIdentifier"/>
        <!--   -->
            </xs:choice>
            <!--
Choice two.    With <etal>.
               The presence of <etal> indicates that there are names that cannot
               be explicitily included. It may be empty, or it may have simple content
               - e.g. <etal>et al.</etal>.  In the latter case the content is what is
               suggested for display.
               When <etal> occurs:
                  - <namePart>, <displayForm>, and <identifier> MAY NOT occur;
                  - <affiliation>, <role>, <description>   MAY occur (but are NOT repeatable).
              <etal> is not repeatable within a given <name>, however there may be
              mutilple <etal> elements, each within in a separate <name> element.
-->
            <xs:sequence>
                <!--
             <etal> is mandatory, nonrepeatable, and must occur first.
            After that <affiliation>, <role>, and <description> may occur, in any order or number.
            <nameIdentifier> is not used with <etal>
-->
                <xs:element ref="etal"/>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="affiliation"/>
                    <xs:element ref="role"/>
                    <xs:element ref="description"/>
                </xs:choice>
            </xs:sequence>
            <!-- -->
        </xs:choice>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
        <xs:attribute name="nameTitleGroup" type="xs:string"/>
        <xs:attribute name="usage" fixed="primary"/>
        <xs:attribute name="type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="personal"/>
                    <xs:enumeration value="corporate"/>
                    <xs:enumeration value="conference"/>
                    <xs:enumeration value="family"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <!--

********   Subordinate Elements for <name>
 -->
    <!-- namePart-->
    <xs:element name="namePart" type="namePartDefinition"/>
    <!-- -->
    <xs:complexType name="namePartDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="type">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="date"/>
                            <xs:enumeration value="family"/>
                            <xs:enumeration value="given"/>
                            <xs:enumeration value="termsOfAddress"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- displayForm, affiliation, description -->
    <xs:element name="displayForm" type="stringPlusLanguage"/>
    <xs:element name="affiliation" type="stringPlusLanguage"/>
    <xs:element name="description" type="stringPlusLanguage"/>
    <!-- new in 3.6 -->
    <!--  nameIdentifier -->
    <xs:element name="nameIdentifier" type="identifierDefinition"/>
    <!--
******** role *********************
    -->
    <xs:element name="role" type="roleDefinition"/>
    <!-- -->
    <xs:complexType name="roleDefinition">
        <xs:sequence maxOccurs="unbounded">
            <xs:element ref="roleTerm"/>
        </xs:sequence>
    </xs:complexType>
    <!--
***************roleTerm ***********************
    -->
    <xs:element name="roleTerm" type="roleTermDefinition"/>
    <!-- -->
    <xs:complexType name="roleTermDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="type" type="codeOrText"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
********  etal  ********
-->
    <xs:element name="etal" type="stringPlusLanguage"/>
    <!--

****************************************************
*   Top Level Element <note>                      *
*****************************************************
-->
    <xs:element name="note" type="noteDefinition"/>
    <!-- -->
    <xs:complexType name="noteDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attribute name="typeURI" type="xs:anyURI"/>
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attribute name="ID" type="xs:ID"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--

****************************************************
*   Top Level Element <originInfo>                 *
*****************************************************
-->
    <xs:element name="originInfo" type="originInfoDefinition"/>
    <!-- -->
    <xs:complexType name="originInfoDefinition">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="place"/>
            <xs:element ref="publisher"/>
            <xs:element ref="dateIssued"/>
            <xs:element ref="dateCreated"/>
            <xs:element ref="dateCaptured"/>
            <xs:element ref="dateValid"/>
            <xs:element ref="dateModified"/>
            <xs:element ref="copyrightDate"/>
            <xs:element ref="dateOther"/>
            <xs:element ref="edition"/>
            <xs:element ref="issuance"/>
            <xs:element ref="frequency"/>
        </xs:choice>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
        <xs:attribute name="eventType" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <originInfo>
 -->
    <!--
*** place ***
-->
    <xs:element name="place" type="placeDefinition"/>
    <!-- -->
    <xs:complexType name="placeDefinition">
        <xs:sequence>
            <xs:element ref="placeTerm" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="supplied" fixed="yes"/>
    </xs:complexType>
    <!--
*** placeTerm ***
-->
    <xs:element name="placeTerm" type="placeTermDefinition"/>
    <!-- -->
    <xs:complexType name="placeTermDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="authorityURI" type="xs:anyURI"/>
                <xs:attribute name="valueURI" type="xs:anyURI"/>
                <xs:attribute name="authority">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="marcgac"/>
                            <xs:enumeration value="marccountry"/>
                            <xs:enumeration value="iso3166"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="type" type="codeOrText"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
*** publisher ***
-->
    <xs:element name="publisher" type="stringPlusLanguagePlusSupplied"/>
    <!--
********** dates  **********
-->
    <xs:element name="dateIssued" type="dateDefinition"/>
    <xs:element name="dateCreated" type="dateDefinition"/>
    <xs:element name="dateCaptured" type="dateDefinition"/>
    <xs:element name="dateValid" type="dateDefinition"/>
    <xs:element name="dateModified" type="dateDefinition"/>
    <xs:element name="copyrightDate" type="dateDefinition"/>
    <xs:element name="dateOther" type="dateOtherDefinition"/>
    <!--  -->
    <xs:complexType name="dateDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="encoding">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="w3cdtf"/>
                            <xs:enumeration value="iso8601"/>
                            <xs:enumeration value="marc"/>
                            <xs:enumeration value="temper"/>
                            <xs:enumeration value="edtf"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="qualifier">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="approximate"/>
                            <xs:enumeration value="inferred"/>
                            <xs:enumeration value="questionable"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="point">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="start"/>
                            <xs:enumeration value="end"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="keyDate" fixed="yes"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
    ********** dateOther  **********
-->
    <xs:complexType name="dateOtherDefinition">
        <xs:simpleContent>
            <xs:extension base="dateDefinition">
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
    ********** edition **********
-->
    <xs:element name="edition" type="stringPlusLanguagePlusSupplied"/>
    <!--
********** issuance **********
       -->
    <xs:element name="issuance" type="issuanceDefinition"/>
    <!-- -->
    <xs:simpleType name="issuanceDefinition">
        <xs:restriction base="xs:string">
            <xs:enumeration value="continuing"/>
            <xs:enumeration value="monographic"/>
            <xs:enumeration value="single unit"/>
            <xs:enumeration value="multipart monograph"/>
            <xs:enumeration value="serial"/>
            <xs:enumeration value="integrating resource"/>
        </xs:restriction>
    </xs:simpleType>
    <!--
    ********** frequency**********
-->
    <xs:element name="frequency" type="stringPlusLanguagePlusAuthority"/>
    <!--

****************************************************
*   Top Level Element <part>                       *
*****************************************************
-->
    <xs:element name="part" type="partDefinition"/>
    <!-- -->
    <xs:complexType name="partDefinition">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="detail"/>
            <xs:element name="extent" type="extentDefinition"/>
            <xs:element ref="date"/>
            <xs:element ref="text"/>
        </xs:choice>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attribute name="type" type="xs:string"/>
        <xs:attribute name="order" type="xs:integer"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <part>
 -->
    <!--
********** detail **********
-->
    <xs:element name="detail" type="detailDefinition"/>
    <!-- -->
    <xs:complexType name="detailDefinition">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="number"/>
            <xs:element ref="caption"/>
            <xs:element ref="title"/>
        </xs:choice>
        <xs:attribute name="type" type="xs:string"/>
        <xs:attribute name="level" type="xs:positiveInteger"/>
    </xs:complexType>
    <!-- -->
    <xs:element name="number" type="stringPlusLanguage"/>
    <xs:element name="caption" type="stringPlusLanguage"/>
    <!--
********** extent **********
-->
    <xs:complexType name="extentDefinition">
        <xs:sequence>
            <xs:element ref="start" minOccurs="0"/>
            <xs:element ref="end" minOccurs="0"/>
            <xs:element ref="total" minOccurs="0"/>
            <xs:element ref="list" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="unit" type="xs:string"/>
    </xs:complexType>
    <!-- -->
    <xs:element name="start" type="stringPlusLanguage"/>
    <xs:element name="end" type="stringPlusLanguage"/>
    <xs:element name="total" type="xs:positiveInteger"/>
    <xs:element name="list" type="stringPlusLanguage"/>
    <!--
***************** date ***
-->
    <xs:element name="date" type="dateDefinition"/>
    <!--
***************** text ***
-->
    <xs:element name="text">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="stringPlusLanguage">
                    <xs:attribute name="displayLabel" type="xs:string"/>
                    <xs:attribute name="type" type="xs:string"/>
                    <xs:attributeGroup ref="xlink:simpleLink"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <!--

****************************************************
*   Top Level Element <physicalDescription> *
*****************************************************
 -->
    <xs:element name="physicalDescription" type="physicalDescriptionDefinition"/>
    <!-- -->
    <xs:complexType name="physicalDescriptionDefinition">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="form"/>
            <!-- same definition as is used in copyInformation -->
            <xs:element ref="reformattingQuality"/>
            <xs:element ref="internetMediaType"/>
            <xs:element ref="extent"/>
            <xs:element ref="digitalOrigin"/>
            <xs:element name="note" type="physicalDescriptionNote"/>
        </xs:choice>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <physicalDescription>
 -->
    <!--
**********reformattingQuality **********
 -->
    <xs:element name="reformattingQuality" type="reformattingQualityDefinition"/>
    <!-- -->
    <xs:simpleType name="reformattingQualityDefinition">
        <xs:restriction base="xs:string">
            <xs:enumeration value="access"/>
            <xs:enumeration value="preservation"/>
            <xs:enumeration value="replacement"/>
        </xs:restriction>
    </xs:simpleType>
    <!--
**********internetMediaType **********
 -->
    <xs:element name="internetMediaType" type="stringPlusLanguage"/>
    <!--
********** extent **********
 -->
    <xs:element name="extent">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="stringPlusLanguagePlusSupplied">
                    <xs:attribute name="unit"/>
                </xs:extension>
                </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <!--
********** digitalOrigin **********
 -->
    <xs:element name="digitalOrigin" type="digitalOriginDefinition"/>
    <!-- -->
    <xs:simpleType name="digitalOriginDefinition">
        <xs:restriction base="xs:string">
            <xs:enumeration value="born digital"/>
            <xs:enumeration value="reformatted digital"/>
            <xs:enumeration value="digitized microfilm"/>
            <xs:enumeration value="digitized other analog"/>
        </xs:restriction>
    </xs:simpleType>
    <!--
********** note **********
 -->
    <xs:complexType name="physicalDescriptionNote">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attribute name="typeURI" type="xs:anyURI"/>
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attribute name="ID" type="xs:ID"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <recordInfo>              *
*****************************************************

**********  recordInfo  **********
-->
    <xs:element name="recordInfo" type="recordInfoDefinition"/>
    <!-- -->
    <xs:complexType name="recordInfoDefinition">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="recordContentSource"/>
            <xs:element ref="recordCreationDate"/>
            <xs:element ref="recordChangeDate"/>
            <xs:element ref="recordIdentifier"/>
            <xs:element ref="languageOfCataloging"/>
            <xs:element ref="recordOrigin"/>
            <xs:element ref="descriptionStandard"/>
            <!--
                *****************following added in 3.6 -->
            <xs:element ref="recordInfoNote"/>
<!-- -->
        </xs:choice>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <recordInfo>
 -->
    <xs:element name="recordContentSource" type="stringPlusLanguagePlusAuthority"/>
    <xs:element name="recordCreationDate" type="dateDefinition"/>
    <xs:element name="recordChangeDate" type="dateDefinition"/>
        <!--
                *****************following added in 3.6 -->
    <xs:element name="recordInfoNote" type="noteDefinition"/>
    <!--
********** recordIdentifier
-->
    <xs:element name="recordIdentifier" type="recordIdentifierDefinition"/>
    <!-- -->
    <xs:complexType name="recordIdentifierDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="source" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- -->
    <xs:element name="languageOfCataloging" type="languageDefinition"/>
    <xs:element name="recordOrigin" type="stringPlusLanguage"/>
    <xs:element name="descriptionStandard" type="stringPlusLanguagePlusAuthority"/>
    <!--

****************************************************
*   Top Level Element <relatedItem>             *
*****************************************************

**********   relatedItem  **********
-->
    <xs:element name="relatedItem" type="relatedItemDefinition"/>
    <!-- -->
    <xs:complexType name="relatedItemDefinition">
        <xs:group ref="modsGroup" minOccurs="0" maxOccurs="unbounded"/>
        <xs:attribute name="type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="preceding"/>
                    <xs:enumeration value="succeeding"/>
                    <xs:enumeration value="original"/>
                    <xs:enumeration value="host"/>
                    <xs:enumeration value="constituent"/>
                    <xs:enumeration value="series"/>
                    <xs:enumeration value="otherVersion"/>
                    <xs:enumeration value="otherFormat"/>
                    <xs:enumeration value="isReferencedBy"/>
                    <xs:enumeration value="references"/>
                    <xs:enumeration value="reviewOf"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <!--
        Following four attributes are new in 3.6
        -->
        <xs:attribute name="otherType" type="xs:string"/>
        <xs:attribute name="otherTypeAuth" type="xs:string"/>
        <xs:attribute name="otherTypeAuthURI" type="xs:string"/>
        <xs:attribute name="otherTypeURI" type="xs:string"/>
        <!-- -->

        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>

    </xs:complexType>
    <!--

****************************************************
*   Top Level Element <subject>                  *
*****************************************************
-->
    <xs:element name="subject" type="subjectDefinition"/>
    <!-- -->
    <xs:complexType name="subjectDefinition">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="topic"/>
            <xs:element ref="geographic"/>
            <xs:element ref="temporal"/>
            <xs:element name="titleInfo" type="subjectTitleInfoDefinition"/>
            <xs:element name="name" type="subjectNameDefinition"/>
            <xs:element ref="geographicCode"/>
            <xs:element ref="hierarchicalGeographic"/>
            <xs:element ref="cartographics"/>
            <xs:element ref="occupation"/>
            <xs:element ref="genre"/>
            <!-- uses top-level genre definition -->
        </xs:choice>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
        <xs:attribute name="usage" fixed="primary"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <subject>
 -->
    <!-- topic, geographic -->
    <xs:element name="topic" type="stringPlusLanguagePlusAuthority"/>
    <xs:element name="geographic" type="stringPlusLanguagePlusAuthority"/>
    <!--
*****************temporal  ************************
 -->
    <xs:element name="temporal" type="temporalDefinition"/>
    <!-- -->
    <xs:complexType name="temporalDefinition">
        <xs:simpleContent>
            <xs:extension base="dateDefinition">
                <xs:attributeGroup ref="authorityAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
*****************subjectTitleInfo ************************
-->
    <xs:complexType name="subjectTitleInfoDefinition">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="title"/>
            <xs:element ref="subTitle"/>
            <xs:element ref="partNumber"/>
            <xs:element ref="partName"/>
            <xs:element ref="nonSort"/>
        </xs:choice>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
        <xs:attribute name="type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="abbreviated"/>
                    <xs:enumeration value="translated"/>
                    <xs:enumeration value="alternative"/>
                    <xs:enumeration value="uniform"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <!--
*****************subjectName ************************
-->
    <xs:complexType name="subjectNameDefinition">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="namePart"/>
            <xs:element ref="displayForm"/>
            <xs:element ref="affiliation"/>
            <xs:element ref="role"/>
            <xs:element ref="description"/>
<!--            ****** following element <nameIdentifier> new in 3.6. -->
            <xs:element ref="nameIdentifier"/>
            <!-- -->
        </xs:choice>
        <xs:attribute name="type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="personal"/>
                    <xs:enumeration value="corporate"/>
                    <xs:enumeration value="conference"/>
                    <xs:enumeration value="family"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
    </xs:complexType>
    <!--
 ********** geographicCode **********
-->
    <xs:element name="geographicCode" type="geographicCodeDefinition"/>
    <!-- -->
    <xs:complexType name="geographicCodeDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="authorityURI" type="xs:anyURI"/>
                <xs:attribute name="valueURI" type="xs:anyURI"/>
                <xs:attribute name="authority">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="marcgac"/>
                            <xs:enumeration value="marccountry"/>
                            <xs:enumeration value="iso3166"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
********** hierarchicalGeographic **********
-->
    <xs:element name="hierarchicalGeographic" type="hierarchicalGeographicDefinition"/>
    <!-- -->
    <xs:complexType name="hierarchicalGeographicDefinition">
        <xs:choice maxOccurs="unbounded">
            <xs:element ref="extraTerrestrialArea"/>
            <xs:element ref="continent"/>
            <xs:element ref="country"/>
            <xs:element ref="province"/>
            <!-- province is deprecated in version 3.6.  Use <state> instead.  -->
            <xs:element ref="region"/>
            <xs:element ref="state"/>
            <!-- <state> definition broadened in 3.6.  Use <state> for all first order political divisions, e.g. province. -->
            <xs:element ref="territory"/>
            <xs:element ref="county"/>
            <xs:element ref="city"/>
            <xs:element ref="citySection"/>
            <xs:element ref="island"/>
            <xs:element ref="area"/>
        </xs:choice>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
    </xs:complexType>
    <!-- -->
    <!--
        New in 3.6:
        all the above elements were previously stringPlusLanguage.
        Now the following attributes are added:
            - @level   (for all)
            - @authority, @authorityURI, and @valueURI  (the authority attributeGroup)  (for all)
            - @period  (for all)
            - @areaType, @regionType, and @citySectionType (for area, region, and citySection, respectively)

            So there is a new auxiliary definition, hierarchicalPart which adds @level, authority group, and @period
            as well as three new definitions each extending hierarchicalPart, for area, region, and city section, each
            adding its respective attribute.
    -->

    <!--
        ********** hierarchicalPart   *** new in 3.6, auxiliary definition
    -->
    <xs:complexType name="hierarchicalPart">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="level"/>
                <xs:attribute name="period"/>
                <xs:attributeGroup ref="authorityAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
        <!--
        Next, definitions for the place elements, starting with area, region, and citySection
        -->

        <xs:element name="area" type="areaDefinition"/>
    <!-- -->
    <xs:complexType name="areaDefinition">
        <xs:simpleContent>
            <xs:extension base="hierarchicalPart">
                <xs:attribute name="areaType"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
        <!-- -->

    <xs:element name="region" type="regionDefinition"/>
    <!-- -->
    <xs:complexType name="regionDefinition">
        <xs:simpleContent>
            <xs:extension base="hierarchicalPart">
                <xs:attribute name="regionType"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

        <xs:element name="citySection" type="citySectionDefinition"/>
    <!-- -->
    <xs:complexType name="citySectionDefinition">
        <xs:simpleContent>
            <xs:extension base="hierarchicalPart">
                <xs:attribute name="citySectionType"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
        <!--
    For the rest, "stringPlusLanguage" is changed to "hierarchicalPart"   ......
        -->
    <xs:element name="extraTerrestrialArea" type="hierarchicalPart"/>
        <xs:element name="city" type="hierarchicalPart"/>
    <xs:element name="continent" type="hierarchicalPart"/>
    <xs:element name="country" type="hierarchicalPart"/>
    <xs:element name="county" type="hierarchicalPart"/>
    <xs:element name="island" type="hierarchicalPart"/>
    <xs:element name="state" type="hierarchicalPart"/>
    <xs:element name="territory" type="hierarchicalPart"/>
    <!--
        ..... except for province, which remains the same
    -->
    <xs:element name="province" type="stringPlusLanguage"/>
    <!--
 ********** cartographics **********
-->
    <xs:element name="cartographics" type="cartographicsDefinition"/>
    <!-- -->
    <xs:complexType name="cartographicsDefinition">

        <xs:sequence>
            <xs:element ref="scale" minOccurs="0"/>
            <xs:element ref="projection" minOccurs="0"/>
            <xs:element ref="coordinates" minOccurs="0" maxOccurs="unbounded"/>
            <!--
      *********** Following is new in 3.6, to allow an extension schema.    -->
            <xs:element ref="cartographicExtension" minOccurs="0" maxOccurs="unbounded"/>
<!--  -->
        </xs:sequence>

        <xs:attributeGroup ref="authorityAttributeGroup"/>
    </xs:complexType>
    <!-- -->
    <xs:element name="scale" type="stringPlusLanguage"/>
    <xs:element name="projection" type="stringPlusLanguage"/>
    <xs:element name="coordinates" type="stringPlusLanguage"/>
<!--     *********** Following is new in 3.6,     -->
    <xs:element name="cartographicExtension" type="extensionDefinition"/>
    <!--
 ********** occupation **********
-->
    <xs:element name="occupation" type="stringPlusLanguagePlusAuthority"/>
    <!--
****************************************************
*   Top Level Element <tableOfContents>     *
*****************************************************
 -->
    <xs:element name="tableOfContents" type="tableOfContentsDefinition"/>
    <!-- -->
    <xs:complexType name="tableOfContentsDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
                <xs:attributeGroup ref="xlink:simpleLink"/>
                <xs:attribute name="shareable" fixed="no"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attributeGroup ref="altFormatAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--

****************************************************
*   Top Level Element <targetAudience>       *
*****************************************************
 -->
    <xs:element name="targetAudience" type="targetAudienceDefinition"/>
    <!-- -->
    <xs:complexType name="targetAudienceDefinition">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguagePlusAuthority">
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
****************************************************
*   Top Level Element <titleInfo>                   *
*****************************************************
          -->
    <xs:element name="titleInfo" type="titleInfoDefinition"/>
    <!-- -->
    <xs:complexType name="titleInfoDefinition">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="title"/>
            <xs:element ref="subTitle"/>
            <xs:element ref="partNumber"/>
            <xs:element ref="partName"/>
            <xs:element ref="nonSort"/>
        </xs:choice>
        <xs:attribute name="type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="abbreviated"/>
                    <xs:enumeration value="translated"/>
                    <xs:enumeration value="alternative"/>
                    <xs:enumeration value="uniform"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="otherType"/>
        <xs:attribute name="supplied" fixed="yes"/>
        <xs:attribute name="altRepGroup" type="xs:string"/>
        <xs:attributeGroup ref="altFormatAttributeGroup"/>
        <xs:attribute name="nameTitleGroup" type="xs:string"/>
        <xs:attribute name="usage" fixed="primary"/>
        <xs:attribute name="ID" type="xs:ID"/>
        <xs:attributeGroup ref="authorityAttributeGroup"/>
        <xs:attributeGroup ref="xlink:simpleLink"/>
        <xs:attributeGroup ref="languageAttributeGroup"/>
        <xs:attribute name="displayLabel" type="xs:string"/>
    </xs:complexType>
    <!--

********   Subordinate Elements for <titleInfo>
 -->
    <xs:element name="title" type="stringPlusLanguage"/>
    <xs:element name="subTitle" type="stringPlusLanguage"/>
    <xs:element name="partNumber" type="stringPlusLanguage"/>
    <xs:element name="partName" type="stringPlusLanguage"/>
    <!--
*********  nonSort definition revised in 3.6. to add attribute xml:space.
        -->
    <xs:element name="nonSort">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="stringPlusLanguage">
                    <xs:attribute ref="xml:space"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <!--
****************************************************
*   Top Level Element <typeOfResource>     *
*****************************************************
 -->
    <xs:element name="typeOfResource" type="typeOfResourceDefinition"/>
    <!-- -->
    <xs:complexType name="typeOfResourceDefinition">
        <xs:simpleContent>
            <xs:extension base="resourceTypeDefinition">
                <xs:attribute name="collection" fixed="yes"/>
                <xs:attribute name="manuscript" fixed="yes"/>
                <xs:attribute name="displayLabel" type="xs:string"/>
                <xs:attribute name="altRepGroup" type="xs:string"/>
                <xs:attribute name="usage" fixed="primary"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--

********   Subordinate Definitions for <typeOfResource>
 -->
    <!--
 ******* resourceTypeDefinition  ********
-->
    <xs:simpleType name="resourceTypeDefinition">
        <xs:restriction base="xs:string">
            <xs:enumeration value="text"/>
            <xs:enumeration value="cartographic"/>
            <xs:enumeration value="notated music"/>
            <xs:enumeration value="sound recording-musical"/>
            <xs:enumeration value="sound recording-nonmusical"/>
            <xs:enumeration value="sound recording"/>
            <xs:enumeration value="still image"/>
            <xs:enumeration value="moving image"/>
            <xs:enumeration value="three dimensional object"/>
            <xs:enumeration value="software, multimedia"/>
            <xs:enumeration value="mixed material"/>
            <xs:enumeration value=""/>
        </xs:restriction>
    </xs:simpleType>
    <!--
         *********************************
         *********************************
         Part 3:   Auxiliary definitions
         *********************************
         *********************************

**********************************
String Definitions
**********************************
-->
    <!--
********** stringPlusLanguage
   -->
    <xs:complexType name="stringPlusLanguage">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attributeGroup ref="languageAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
************************* stringPlusLanguagePlusAuthority  *************************
 -->
    <xs:complexType name="stringPlusLanguagePlusAuthority">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attributeGroup ref="authorityAttributeGroup"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
************************* stringPlusLanguagePlusSupplied  *************************
 -->
    <xs:complexType name="stringPlusLanguagePlusSupplied">
        <xs:simpleContent>
            <xs:extension base="stringPlusLanguage">
                <xs:attribute name="supplied" fixed="yes"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!--
**********************************
  Attribute Group Definitions
**********************************
-->
    <!--
 ********** authorityAttributeGroup   **********
   -->
    <xs:attributeGroup name="authorityAttributeGroup">
        <!-- new in 3.4 -->
        <xs:attribute name="authority" type="xs:string"/>
        <xs:attribute name="authorityURI" type="xs:anyURI"/>
        <xs:attribute name="valueURI" type="xs:anyURI"/>
    </xs:attributeGroup>
    <!--
  ********** languageAttributeGroup   **********
-->
    <xs:attributeGroup name="languageAttributeGroup">
        <xs:attribute name="lang" type="xs:string"/>
        <xs:attribute ref="xml:lang"/>
        <xs:attribute name="script" type="xs:string"/>
        <xs:attribute name="transliteration" type="xs:string"/>
    </xs:attributeGroup>
    <!--
  ********** altFormatAttributeGroup   **********
-->
    <xs:attributeGroup name="altFormatAttributeGroup">
        <xs:attribute name="altFormat" type="xs:anyURI"/>
        <xs:attribute name="contentType" type="xs:string"/>
    </xs:attributeGroup>
    <!--
****************************************************
  - Attribute definitions (simpleTypes)
*****************************************************
-->
    <!--
   ********** codeOrText
                  ******** used by type attribute  for elements that distinguish code from text:
                  ******** <languageTerm>, <placeTerm>, <roleTerm>, <scriptTerm>
 -->
    <xs:simpleType name="codeOrText">
        <xs:restriction base="xs:string">
            <xs:enumeration value="code"/>
            <xs:enumeration value="text"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- -->
</xs:schema>