Permalink
Fetching contributors…
Cannot retrieve contributors at this time
1712 lines (1594 sloc) 79.9 KB
<?xml version="1.0" encoding="UTF-8"?>
<!-- Via XMLSpy, 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="http://www.loc.gov/mods/xml.xsd"/>
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.loc.gov/standards/xlink/xlink.xsd"/>
<!--
****************************************************************
* *
* MODS 3.4 *
* June 10, 2010 *
* *
*****************************************************************
MODS: Metadata Object Description Schema. See http://www.loc.gov/standards/mods/
Modified June 17, 2010. attribute altRepGroup added to accessCondition. This had been omitted in error.
******************************************************************************************************************************************************************
*************************************
Changes from version 3.3
*************************************
1. <form> as sublement of <location><holdingsSimple><copyInformation> is changed to conform to the <form> element defined for the MODS namespace. The effect of this change is attribute ID is now allowed for <form>. Since it is optional this will not affect existing instances.
2. The attribute 'displayLabel' has been added to the definitions of several top level elements, so that all top level elements now have this attribute. Specifically 'displayLabel' has been added to the definitions of: <extension>, <genre>, <location>, <language>, <name>, <originInfo>, <part>, <physicalDescription>, <recordInfo>, <subject>, <targetAudience>, <typeOfResource>.
3. Element <scriptTerm> is defined, a subelement of <language>, with attributes type (code or text) and authority.
4. The languageAttributeGroup (lang, xml:lang, script and transliteration) now applies to every text element. This is accomplished by use of the newly defined "xsString" type, replacing the assignment of "xs:string" wherever applicable, that is, everywhere xs:string was previously used except to define an attribute or as the base of an extension for a definition with enumerated values. In addition it has been added to top level elements <language>, <location>, and <part>; all other top level element already had these attributes in version 3.3 so now all top level elements have them.
5. Values "references" and "reviewOf" are added to attribute "type" of <relatedItem>.
6. The values "single unit", "multipart monograph", "serial", "integrating resource" are added to <originInfo><issuance>.
7. Attribute ""shareable" is defined and added to <tableOfContents> and <abstract>. It has a single value: "no" .
8. Attribute ""supplied" is defined and added to <originInfo><edition>, <originInfo><place>, <originInfo><publisher>, <physicalDescription><extent>, and <titleInfo>. It has a single value: "yes" .
9. For dates, "edtf" and "temper" are added to the list values that may be used for the "encoding" attribute.
10. The version attribute now enumerates all 3.x versions (3.0, 3.1, 3.2, 3.3, and 3.4). In earlier versions of the schema, only the latest version was allowed. (E.g. in version 3.3, the only allowable value for the version attribute was "3.3".)
11. For the type attribute for <name>, the value "family" is added to the list of possible values.
12. New attributes authorityURI and valueURI are defined, type xs:anyURI, identifying a controlled vocabulary and a value from that vocabulary, respectively. These two attributes are applied to:
(a) any element that already had an authority attribute in 3.3:
descriptionStandard, frequency, recordContentSource, roleTerm, classification, Form, targetAudience, genre,
physicalLocation, name, subject, titleInfo, geographicCode, placeTerm, languageTerm.
(b) new elements that have an authority attribute: scriptTerm
(c) all subelements of <subject>.
13. New attribute altRepGroup added to all MODS top level elements, except relatedItem. This is to support encoding of translations and transliterations of the same content. Thus identical values of this attribute occuring on different instances of the same top level element indicates that they contain the same content in a different language or transliteration.
14. New attribute 'nameTitleGroup' defined for <titleInfo> and <name>. When the value of 'nameTitleGroup' for a specific instance of <titleInfo> equals the value of 'nameTitleGroup' for a specific instance of <name> then those instances are considered to be in the same name/title group.
15. The 'usage' attribute, which had applied only to <url> (of <location>) in 3.3, now applies also to <titleInfo>, <name>, <typeOfResource>, <language>, <subject>, <classification>, and <genre> in 3.4. Previously, it had a single value, "primary display", for <url>. Now, when used with these new elements, there is a single value, "primary". For <url>, both "primary display" and "primary" are allowed but "primary display" is depricated.
16. The schema is rewritten in namespace-normalized form, and the definitions and sections are reorganized.
******************************************************************************************************************************************************************
*************************************
Organization of this schema
*************************************
The schema has four sections:
1. Preliminary declarations and definitions
2. Type definitions
3. Element declarations
4. Auxiliary Definitions for Attributes
The MODS namespace consists of type names and element names: (2) and (3)
*********************************************************************************************************************************************************************
***********************************************************************
Part 1: Preliminary Declarations and Definitions
***********************************************************************
- Definition of a single MODS record and a MODS collection
- modsGroup, listing the top level MODS elements
*****************************************************************************************
*****************************************************************************************
Declaration of a single MODS record:
-->
<xs:element name="mods" type="modsDefinition"/>
<!--
Declaration of a MODS collection:
-->
<xs:element name="modsCollection" type="modsCollectionDefinition"/>
<!--
******* 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>
<!--
***********************************************************************
** Definition of a single MODS record **
**********************************************************************
-->
<xs:complexType name="modsDefinition">
<xs:group ref="modsGroup" maxOccurs="unbounded"/>
<xs:attribute name="ID" type="xs:ID"/>
<xs:attribute name="version" type="modsVersionAttributeDefinition"/>
</xs:complexType>
<!--
***********************************************************************
** Definition of a MODS collection **
**********************************************************************
-->
<xs:complexType name="modsCollectionDefinition">
<xs:sequence>
<xs:element ref="mods" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!--
*****************************************************************************************
*****************************************************************************************
********************************************************
Part 2: Type Definitions
********************************************************
- Data type definitions for top level elements
- subordinate type definitions
*****************************************************************************************
*****************************************************************************************
All type names are part of the MODS namespace
***********************************************************************
** Data type definitions for top level elements **
***********************************************************************
-->
<!--
*********************************************
* Top Level Element <abstract> *
*********************************************
********** abstractDefinition **********
-->
<xs:complexType name="abstractDefinition">
<xs:simpleContent>
<xs:extension base="unstructuredTextDefinition">
<xs:attribute name="shareable" type="noDefinition"/>
<!-- shareable new in 3.4 -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <accessCondition> *
*****************************************************
********** accessConditionDefinition **********
-->
<xs:complexType name="accessConditionDefinition">
<xs:complexContent>
<xs:extension base="extensionDefinition">
<xs:attributeGroup ref="xlink:simpleLink"/>
<xs:attributeGroup ref="languageAttributeGroup"/>
<!-- attribute "displayLabel" was here in 3.3, removed in 3.4 because it has been added to the <extension> definition. -->
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4
***** added June 17, 2010. This had been omitted in error ****
-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <classification> *
*****************************************************
********** classificationDefinition **********
-->
<xs:complexType name="classificationDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthority">
<xs:attribute name="edition" type="xs:string"/>
<xs:attribute name="displayLabel" type="xs:string"/>
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <classification> in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <extension> *
*****************************************************
********** 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"/>
<!-- displayLabel added to <extension> in 3.4. -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <genre> *
*****************************************************
********** genreDefinition **********
-->
<xs:complexType name="genreDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthorityPlusTypePlusDisplayLabel">
<!-- displayLabel added to <genre> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <genre> in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <identifier> *
*****************************************************
********** identifierDefinition **********
-->
<xs:complexType name="identifierDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="displayLabel" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="invalid" type="yesDefinition"/>
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <language> *
*****************************************************
********** languageDefinition **********
***************** <scriptTerm> is introduced into <language> in 3.4.
***************** In 3.3 <language> consists solely of <languageTerm>
***************** so if <language> is present then there must be at least one instance
***************** of <languageTerm> and there may be more than one.
***************** Now, in 3.4, if <language> is present, still there must be
**************** at least one <languageTerm> element, and there may be more than one;
***************** and there may be any number of <scriptTerm> elements, including zero.
-->
<xs:complexType name="languageDefinition">
<xs:sequence>
<xs:element ref="languageTerm" maxOccurs="unbounded"/>
<xs:element ref="scriptTerm" minOccurs="0" maxOccurs="unbounded"/>
<!-- scriptTerm new in 3.4 -->
</xs:sequence>
<xs:attribute name="objectPart" type="xs:string"/>
<xs:attributeGroup ref="languagePlusDisplayLabelAttributeGroup"/>
<!-- attributes language and displayLabel added to <language> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <language> in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <location> *
*****************************************************
********** 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="languagePlusDisplayLabelAttributeGroup"/>
<!-- attributes language and displayLabel added to <location> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <name> *
*****************************************************
********** nameDefinition **********
****** the bulk of this definition is in nameBaseDefinition, which was
****** split out from this definition in version 3.4 in order to support different
****** name definitions for name at top level and subject/name. The latter
****** does not have the three new attributes below.
-->
<xs:complexType name="nameDefinition">
<xs:complexContent>
<xs:extension base="nameBaseDefinition">
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="nameTitleGroup" type="xs:string"/>
<!-- nameTitleGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <name> in 3.4 -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <note> *
*****************************************************
********** noteDefinition **********
****************** Definition revised in 3.4. Part of it split off to noteBaseDefinition.
****************** <note> as top-level element cannot have same defintion as <note> at lower levels
****************** because it must have attribute altRepGroup at top level which lower level elements
****************** may not have. -->
<xs:complexType name="noteDefinition">
<xs:simpleContent>
<xs:extension base="noteBaseDefinition">
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <originInfo> *
*****************************************************
********** 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="languagePlusDisplayLabelAttributeGroup"/>
<!-- displayLabel added to <originInfo> 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <part> *
*****************************************************
********** partDefinition **********
-->
<xs:complexType name="partDefinition">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<!--minOccurs="0" allows <part> to be optionally empty, when the ID and type attribute values contain all the information needed about the part. -->
<xs:element ref="detail"/>
<xs:element name="extent" type="extentDefinition"/>
<!-- referenced as "name=" rather than "ref=" because <extent> of <part> is not part of the namespace, because it conflicts with <extent> of <physicalDescription> -->
<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="languagePlusDisplayLabelAttributeGroup"/>
<!-- attributes language and displayLabel added to <part> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <physicalDescription> *
*****************************************************
********** physicalDescriptionDefinition **********
-->
<xs:complexType name="physicalDescriptionDefinition">
<xs:choice maxOccurs="unbounded">
<xs:element ref="form"/>
<xs:element ref="reformattingQuality"/>
<xs:element ref="internetMediaType"/>
<xs:element ref="extent"/>
<xs:element ref="digitalOrigin"/>
<xs:element name="note" type="noteBaseDefinition"/>
<!--
********** <note> as a subelement of <physicalDescription> is not part of the
********** MODS namespace, because it needs a different definition than <note>
********** as a top-level element, because of the introduction in 3.4 of the new
********** attribute altRepGroup to apply only to top-level elements
-->
</xs:choice>
<xs:attributeGroup ref="languagePlusDisplayLabelAttributeGroup"/>
<!-- displayLabel added to <physicalDescription> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <recordInfo> *
*****************************************************
********** 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"/>
</xs:choice>
<xs:attributeGroup ref="languagePlusDisplayLabelAttributeGroup"/>
<!-- displayLabel added to <recordInfo> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <relatedItem> *
*****************************************************
********** relatedItemDefinition **********
-->
<xs:complexType name="relatedItemDefinition">
<xs:group ref="modsGroup" minOccurs="0" maxOccurs="unbounded"/>
<xs:attribute name="type" type="relatedItemTypeAttributeDefinition"/>
<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> *
*****************************************************
********** 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"/>
<!-- <titleInfo> as subelement of <subject> is not part of the MODS namespace. See comment at "subjectTitleInfoDefinition" -->
<xs:element name="name" type="subjectNameDefinition"/>
<!-- <name> as subelement of <subject> is not part of the MODS namespace. See comment at "subjectnameDefinition" -->
<xs:element ref="geographicCode"/>
<xs:element ref="hierarchicalGeographic"/>
<xs:element ref="cartographics"/>
<xs:element ref="occupation"/>
<xs:element ref="genre"/>
</xs:choice>
<xs:attributeGroup ref="idAuthorityXlinkLanguageDisplayLabelAttributeGroup"/>
<!-- displayLabel added to <subject> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <subject> in 3.4 -->
</xs:complexType>
<!--
****************************************************
* Top Level Element <tableOfContents> *
*****************************************************
********** tableOfContentsDefinition **********
-->
<xs:complexType name="tableOfContentsDefinition">
<xs:simpleContent>
<xs:extension base="unstructuredTextDefinition">
<xs:attribute name="shareable" type="noDefinition"/>
<!-- shareable new in 3.4 -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <targetAudience> *
*****************************************************
********** targetAudienceDefinition **********
-->
<xs:complexType name="targetAudienceDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthority">
<xs:attribute name="displayLabel" type="xs:string"/>
<!-- displayLabel added to <targetAudience> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <titleInfo> *
*****************************************************
********** titleInfoDefinition **********
-->
<xs:complexType name="titleInfoDefinition">
<xs:complexContent>
<xs:extension base="titleInfoBaseDefinition">
<!--
titleInfoBaseDefinition is split out from titleInfoDefinition so that it can be
used as a base for subjectTitleInfoDefinition, for which the following attributes
do not apply.
-->
<xs:attribute name="type" type="titleInfoTypeAttributeDefinition"/>
<xs:attribute name="supplied" type="yesDefinition"/>
<!-- supplied new in 3.4 -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="nameTitleGroup" type="xs:string"/>
<!-- nameTitleGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <titleInfo> in 3.4 -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
****************************************************
* Top Level Element <typeOfResource> *
*****************************************************
********** typeOfResourceDefinition **********
-->
<xs:complexType name="typeOfResourceDefinition">
<xs:simpleContent>
<xs:extension base="resourceTypeDefinition">
<xs:attribute name="collection" type="yesDefinition"/>
<xs:attribute name="manuscript" type="yesDefinition"/>
<xs:attribute name="displayLabel" type="xs:string"/>
<!--displayLabel added to <typeOfResource> in 3.4. -->
<xs:attribute name="altRepGroup" type="xs:string"/>
<!-- altRepGroup new in 3.4 -->
<xs:attribute name="usage" type="usageAttributeDefinition"/>
<!-- usage added to <typeOfResource> in 3.4 -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
***** End data type definitions for top level elements.
***********************************************************************
***********************************************************************
** Subordinate Type Definitions **
***********************************************************************
***********************************************************************
-->
<!--
********** cartographicsDefinition **********
**************** subelement of subject
-->
<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"/>
</xs:sequence>
<xs:attributeGroup ref="authorityAttributeGroup"/>
<!-- authority attribute group added to <cartographics> in 3.4 -->
</xs:complexType>
<!--
**********copyInformationDefinition **********
**************** <copyInformation> is a subelement of <holdingSimple>, which is a subelement of <location>
************************* subelements <form> and <note> are changed in 3.4 to conform to the
************************* <form> and <note> elements defined for the MODS namespace.
************************* The effect of these change are:
************************* (1) attribute ID is now allowed for <form>; and
************************* (2) attributes xlink, language, and ID are now allowed for <note>.
************************* Since they are optional this will not affect existing instances.
-->
<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" type="noteBaseDefinition" minOccurs="0" maxOccurs="unbounded"/>
<!--
********** <note> as a subelement of <copyInformation> is not part of the
********** MODS namespace, because it needs a different definition than <note>
********** as a top-level element, because of the introduction in 3.4 of the new
********** attribute altRepGroup to apply only to top-level elements
-->
<xs:element ref="enumerationAndChronology" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!--
********** dateDefinition **********
-->
<xs:complexType name="dateDefinition">
<xs:simpleContent>
<xs:extension base="dateBaseDefinition">
<xs:attribute name="keyDate" type="yesDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** dateBaseDefinition **********
***************** Referenced by partDefinition (as well as dateDefinition)
-->
<xs:complexType name="dateBaseDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="encoding" type="dateEncodingAttributeDefinition"/>
<xs:attribute name="qualifier" type="dateQualifierAttributeDefinition"/>
<xs:attribute name="point" type="datePointAttributeDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** dateOtherDefinition **********
***************** <dateOther> is a subelement of <originInfo>
-->
<xs:complexType name="dateOtherDefinition">
<xs:simpleContent>
<xs:extension base="dateDefinition">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** detailDefinition **********
***************** <detail> is a subelement of <part>
-->
<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>
<!--
********** digitalOriginDefinition **********
***************** <digitalOrigin> is a subelement of <physicalDescription>
-->
<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>
<!--
**********enumerationAndChronologyDefinition **********
***************** <enumerationAndChronology> is a subelement of <copyInformation,
****************** which is a subelement of <holdingSimple>,
***************** which is a subelement of <location
-->
<xs:complexType name="enumerationAndChronologyDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="unitType" type="enumerationAndChronologyUnitTypeAttributeDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
***************** extentDefinition ***
***************** <extent> is a subelement of <part>
-->
<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>
<!--
********** geographicCodeDefinition **********
***************** <geographicCode> is a subelement of <subject>
-->
<xs:complexType name="geographicCodeDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attributeGroup ref="placeAuthorityAttributeGroup"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** hierarchicalGeographicDefinition **********
***************** <hierarchicalGeographic> is a subelement of <subject>
-->
<xs:complexType name="hierarchicalGeographicDefinition">
<xs:choice maxOccurs="unbounded">
<xs:element ref="extraterrestrialArea"/>
<xs:element ref="continent"/>
<xs:element ref="country"/>
<xs:element ref="province"/>
<xs:element ref="region"/>
<xs:element ref="state"/>
<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"/>
<!-- authority attribute group added to <hierarchicalGeographic> in 3.4 -->
</xs:complexType>
<!--
********** holdingSimpleDefinition **********
***************** <holdingSimple> is a subelement of <location>
-->
<xs:complexType name="holdingSimpleDefinition">
<xs:sequence>
<xs:element ref="copyInformation" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!--
********** issuanceDefinition **********
***************** <issuance> is a subelement of <originInfo>
-->
<xs:simpleType name="issuanceDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="continuing"/>
<xs:enumeration value="monographic"/>
<!-- The following four: single unit, multipart monograph, serial, integrating resource - all new in 3.4 -->
<xs:enumeration value="single unit"/>
<xs:enumeration value="multipart monograph"/>
<xs:enumeration value="serial"/>
<xs:enumeration value="integrating resource"/>
</xs:restriction>
</xs:simpleType>
<!--
***languageTermDefinition ***
***************** <languageTerm> is a subelement of <language>
-->
<xs:complexType name="languageTermDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attributeGroup ref="languageAuthorityAttributeGroup"/>
<xs:attribute name="type" type="codeOrTextDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** nameBaseDefinition **********
************* This definition is new in 3.4. It is split out from the 3.3 nameDefinition
************* in order to allow different name definitions for top level name and subject/name.
-->
<xs:complexType name="nameBaseDefinition">
<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"/>
</xs:choice>
<xs:attribute name="type" type="nameTypeAttributeDefinition"/>
<xs:attributeGroup ref="idAuthorityXlinkLanguageDisplayLabelAttributeGroup"/>
<!--displayLabel added to <name> 3.4. -->
</xs:complexType>
<!--
**namePartDefinition
***************** <namePart> is a subelement of <name>
-->
<xs:complexType name="namePartDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="type" type="namePartTypeAttributeDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** noteBaseDefinition **********
******************* This definition new in 3.4.
****************** base definition for top-level element, <note>, also used as definition for <note>
****************** as subelement of <physicalDescription>, and also <copyInformation> which is a
****************** subelement of <holdingSimple>, which is a subelement of <location>.
****************** <note> as top-level element cannot have same defintion as <note> at lower levels
****************** because it must have attribute altRepGroup at top level which lower level elements
****************** may not have.
-->
<xs:complexType name="noteBaseDefinition">
<xs:simpleContent>
<xs:extension base="unstructuredTextDefinition">
<xs:attribute name="ID" type="xs:ID"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
*** placeDefinition ***
***************** <place> is a subelement of <originInfo>
-->
<xs:complexType name="placeDefinition">
<xs:sequence>
<xs:element ref="placeTerm" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="supplied" type="yesDefinition"/>
<!-- attribute "supplied" new in 3.4 -->
</xs:complexType>
<!--
*** placeTermDefinition ***
***************** <placeTerm> is a subelement of <place>
***************** which is a subelement of <originInfo>
-->
<xs:complexType name="placeTermDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attributeGroup ref="placeAuthorityAttributeGroup"/>
<xs:attribute name="type" type="codeOrTextDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** physicalLocationDefinition **********
***************** <physicalLocation> is a subelement of <location>
-->
<xs:complexType name="physicalLocationDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthorityPlusTypePlusDisplayLabelPlusXlink"/>
</xs:simpleContent>
</xs:complexType>
<!--
********** recordIdentifierDefinition
***************** <recordIdentifier> is a subelement of <recordInfo>
-->
<xs:complexType name="recordIdentifierDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="source" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
**********reformattingQualityDefinition **********
***************** <reformattingQuality> is a subelement of <physicalDescription>
-->
<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>
<!--
******* resourceTypeDefinition ********
***************** referenced by typeOfResourceDefinition
-->
<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>
<!--
******** roleDefinition *********************
***************** <role> is a subelement of <name>
-->
<xs:complexType name="roleDefinition">
<xs:sequence maxOccurs="unbounded">
<xs:element ref="roleTerm"/>
</xs:sequence>
</xs:complexType>
<!--
***************roleTermDefinition ***********************
***************** <roleTerm> is a subelement of <role>
***************** which is a subelement of <name>
-->
<xs:complexType name="roleTermDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthority">
<xs:attribute name="type" type="codeOrTextDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
*****************scriptTermDefinition ************************
***************** <scriptTerm> is a subelement of <language>
********************** new in 3.4 ******************************************
-->
<xs:complexType name="scriptTermDefinition">
<xs:simpleContent>
<xs:extension base="stringPlusAuthority">
<xs:attribute name="type" type="codeOrTextDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
*****************subjectNameDefinition ************************
********************* New in 3.4
*** this is the definition used by (local) element <name> subelement of <subject>.
*** It is different from <name> when used as a top-level element, because <name>
*** has three new attributes, introduced in 3.4, which are not applicable when <name>
*** is used as subelement of <subject>. Thus <name> as subelement of <subject> is
*** not part of the MODS namespace. This definition, "subjectNameDefinition", however,
*** is part of the MODS namespace.
-->
<xs:complexType name="subjectNameDefinition">
<xs:complexContent>
<xs:extension base="nameBaseDefinition"/>
</xs:complexContent>
</xs:complexType>
<!--
*****************subjectTitleInfoDefinition ************************
********************* New in 3.4
*** this is the definition used by (local) element <titleInfo> subelement of <subject>.
*** It is different from <titleInfo> when used as a top-level element, because <titleInfo>
*** has three new attributes, introduced in 3.4, which are not applicable when <titleInfo>
*** is used as subelement of <subject>. Thus <titleInfo> as subelement of <subject> is
*** not part of the MODS namespace. This definition, "subjectTitleDefinition", however,
*** is part of the MODS namespace.
-->
<xs:complexType name="subjectTitleInfoDefinition">
<xs:complexContent>
<xs:extension base="titleInfoBaseDefinition">
<xs:attribute name="type" type="titleInfoTypeAttributeDefinition"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
*****************temporalDefinition ************************
***************** <temporal> is a subelement of <subject>
-->
<xs:complexType name="temporalDefinition">
<xs:simpleContent>
<xs:extension base="dateDefinition">
<xs:attributeGroup ref="authorityAttributeGroup"/>
<!-- authorityAttributeGroup is new in 3.4 and this temporalDefinition is created in order to accomodate it. -->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** titleInfoBaseDefinition **********
***************** titleInfoBaseDefinition is referenced by titleInfoDefinition and subjectTitleInfoDefinition
-->
<xs:complexType name="titleInfoBaseDefinition">
<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:attributeGroup ref="idAuthorityXlinkLanguageDisplayLabelAttributeGroup"/>
</xs:complexType>
<!--
********** unstructuredTextDefinition **********
***************** unstructuredTextDefinition is the base definition for a number of elements that are simply
***************** strings plus several attributes: these elements include <abstract>, <note>, <title>,
***************** <tableOfContents>, as well as <text> subelement of <part>
-->
<xs:complexType name="unstructuredTextDefinition">
<xs:simpleContent>
<xs:extension base="xsString">
<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>
<!--
********** urlDefinition **********
***************** <url> is a subelement of <location>
-->
<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" type="urlAccessAttributeDefinition"/>
<xs:attribute name="usage" type="urlUsageAttributeDefinition"/>
<!--
****************** this definition is broadened in 3.4. In 3.3, the value
****************** "primary display" only was allowed. In 3.4, the value
****************** "display" is also allowed. And in addition the definition is
******************* generalized in 3.4 to apply to additional elements beyond <url>.
-->
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********************* End of type definitions *********************
There are a few more supporting definitions later; in part 4.
*****************************************************************************************
*****************************************************************************************
********************************************************
Part 3: Element Declarations
********************************************************
Following are the element of the MODS 3.x namespace, as of version 3.4, declared in alphabetical order.
*****************************************************************************************
*****************************************************************************************
-->
<xs:element name="abstract" type="abstractDefinition"/>
<!--************************* <abstract> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="accessCondition" type="accessConditionDefinition"/>
<!--************************* <accessCondition> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="affiliation" type="xsString"/>
<!--************************* <affiliation> is a subelement of <name> -->
<xs:element name="area" type="xsString"/>
<!--************************* <area> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="caption" type="xsString"/>
<!--************************* <caption> is a subelement of <detail>, a subelement of <part> -->
<xs:element name="cartographics" type="cartographicsDefinition"/>
<!--************************* <cartographics> is a subelement of <subject> -->
<xs:element name="city" type="xsString"/>
<!--************************* <city> is a subelement of <hierarchicalGeographic>, a subelement of <subject>-->
<xs:element name="citySection" type="xsString"/>
<!--************************* <citySection> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="classification" type="classificationDefinition"/>
<!--************************* <classification> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="continent" type="xsString"/>
<!--************************* <continent> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="coordinates" type="xsString"/>
<!--************************* <coordinates> is a subelement of <cartographics> -->
<xs:element name="copyInformation" type="copyInformationDefinition"/>
<!--************************* <copyInformation> is a subelement of <holdingSimple>, a subelement of <location> -->
<xs:element name="copyrightDate" type="dateDefinition"/>
<!--************************* <copyrightDate> is a subelement of <originInfo> -->
<xs:element name="country" type="xsString"/>
<!--************************* <country> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="county" type="xsString"/>
<!--************************* <county> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="date" type="dateBaseDefinition"/>
<!--************************* <date> is a subelement of <part> -->
<xs:element name="dateCaptured" type="dateDefinition"/>
<!--************************* <dateCaptured> is a subelement of <originInfo> -->
<xs:element name="dateCreated" type="dateDefinition"/>
<!--************************* <dateCreated> is a subelement of <originInfo> -->
<xs:element name="dateIssued" type="dateDefinition"/>
<!--************************* <dateIssued> is a subelement of <originInfo> -->
<xs:element name="dateModified" type="dateDefinition"/>
<!--************************* <dateModified> is a subelement of <originInfo> -->
<xs:element name="dateOther" type="dateOtherDefinition"/>
<!--************************* <dateOther> is a subelement of <originInfo> -->
<xs:element name="dateValid" type="dateDefinition"/>
<!--************************* <dateValid> is a subelement of <originInfo> -->
<xs:element name="description" type="xsString"/>
<!--************************* <description> is a subelement of <name> -->
<xs:element name="descriptionStandard" type="stringPlusAuthority"/>
<!--************************* <descriptionStandard> is a subelement of <recordInfo> -->
<xs:element name="detail" type="detailDefinition"/>
<!--************************* <detail> is a subelement of <part> -->
<xs:element name="digitalOrigin" type="digitalOriginDefinition"/>
<!--************************* <digitalOrigin> is a subelement of <physicalDescription> -->
<xs:element name="displayForm" type="xsString"/>
<!--************************* <displayForm> is a subelement of <name> -->
<xs:element name="edition" type="stringPlusSupplied"/>
<!--************************* <edition> is a subelement of <originInfo>
****************** attribute "supplied" new in 3.4-->
<xs:element name="electronicLocator" type="xsString"/>
<!--************************* <electronicLocator> is a subelement of <copyInformation>,
a subelement of <holdingSimple>, a subelement of <location> -->
<xs:element name="end" type="xsString"/>
<!--************************* <end> is a subelement of <extent>, a subelement of part -->
<xs:element name="enumerationAndChronology" type="enumerationAndChronologyDefinition"/>
<!--************************* <enumerationAndChronology> is a subelement of <copyInformation,
which is a subelement of <holdingSimple>, which is a subelement of <location> -->
<xs:element name="extension" type="extensionDefinition"/>
<!--************************* <extension> is a "top-level" element, i.e. a subelement of <mods>.
In addition, "extensionDefintion" is the basis for
the definition of <accessCondition> and <holdingsExternal>-->
<xs:element name="extent" type="stringPlusSupplied"/>
<!--************************* <extent> is a subelement of <physicalDescription>
****************** attribute "supplied" new in 3.4 -->
<xs:element name="extraterrestrialArea" type="xsString"/>
<!--************************* <extraterrestrialArea> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="form" type="stringPlusAuthorityPlusType"/>
<!--************************* <form> is a subelement of <physicalDescription> -->
<xs:element name="frequency" type="stringPlusAuthority"/>
<!--************************* <frequency> is a subelement of <originInfo> -->
<xs:element name="genre" type="genreDefinition"/>
<!--************************* <genre> is a "top-level" element, i.e. a subelement of <mods>.
In addition, it is a subelement of <subject>.-->
<xs:element name="geographic" type="stringPlusAuthority"/>
<!--************************* <geographic> is a subelement of <subject>-->
<xs:element name="geographicCode" type="geographicCodeDefinition"/>
<!--************************* <geographicCode> is a subelement of <subject>-->
<xs:element name="hierarchicalGeographic" type="hierarchicalGeographicDefinition"/>
<!--************************* <hierarchicalGeographic> is a subelement of <subject>-->
<xs:element name="holdingExternal" type="extensionDefinition"/>
<!--************************* <holdingExternal> is a subelement of <location>-->
<xs:element name="holdingSimple" type="holdingSimpleDefinition"/>
<!--************************* <holdingSimple> is a subelement of <location>-->
<xs:element name="identifier" type="identifierDefinition"/>
<!--************************* <genre> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="internetMediaType" type="xsString"/>
<!--************************* <internetMediaType> is a subelement of <physicalDescription>-->
<xs:element name="island" type="xsString"/>
<!--************************* <island> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="issuance" type="issuanceDefinition"/>
<!--************************* <issuance> is a subelement of <originInfo> -->
<xs:element name="language" type="languageDefinition"/>
<!--************************* <language> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="languageOfCataloging" type="languageDefinition"/>
<!--************************* <languageOfCataloging> is a subelement of <recordInfo> -->
<xs:element name="languageTerm" type="languageTermDefinition"/>
<!--************************* <languageTerm> is a subelement of <language> -->
<xs:element name="list" type="xsString"/>
<!--************************* <list> is a subelement of <extent>, a subelement of <part> -->
<xs:element name="location" type="locationDefinition"/>
<!--************************* <location> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="name" type="nameDefinition"/>
<!--************************* <name> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="namePart" type="namePartDefinition"/>
<!--************************* <namePart> is a subelement of <name> -->
<xs:element name="nonSort" type="xsString"/>
<!--************************* <nonSort> is a subelement of <name> -->
<xs:element name="note" type="noteDefinition"/>
<!--************************* <note> is a "top-level" element, i.e. a subelement of <mods>.
****************** in addition to being a top-level element, <note> is also a subelement of <physicalDescription>,
****************** and also <copyInformation> which is a subelement of <holdingSimple>, a subelement of <location>.-->
<xs:element name="number" type="xsString"/>
<!--************************* <number> is a subelement of <detail>, a subelement of <part> -->
<xs:element name="occupation" type="stringPlusAuthority"/>
<!--************************* <occupation> is a subelement of <subject> -->
<xs:element name="originInfo" type="originInfoDefinition"/>
<!--************************* <originInfo> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="part" type="partDefinition"/>
<!--************************* <part> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="partName" type="xsString"/>
<!--************************* <partName> is a subelement of <titleInfo> -->
<xs:element name="partNumber" type="xsString"/>
<!--************************* <partNumber> is a subelement of <titleInfo> -->
<xs:element name="physicalDescription" type="physicalDescriptionDefinition"/>
<!--************************* <physicalDescription> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="physicalLocation" type="physicalLocationDefinition"/>
<!--************************* <physicalLocation> is a subelement of <location> -->
<xs:element name="place" type="placeDefinition"/>
<!--************************* <place> is a subelement of <originInfo> -->
<xs:element name="placeTerm" type="placeTermDefinition"/>
<!--************************* <placeTerm> is a subelement <place>, a subelement of <originInfo> -->
<xs:element name="projection" type="xsString"/>
<!--************************* <projection> is a subelement of <cartographics>, a subelement of <subject> -->
<xs:element name="province" type="xsString"/>
<!--************************* <province> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="publisher" type="stringPlusSupplied"/>
<!--************************* <publisher> is a subelement <originInfo>
****************** attribute "supplied" new in 3.4 -->
<xs:element name="recordChangeDate" type="dateDefinition"/>
<!--************************* <recordChangeDate> is a subelement <recordInfo> -->
<xs:element name="recordContentSource" type="stringPlusAuthority"/>
<!--************************* <recordContentSource> is a subelement <recordInfo> -->
<xs:element name="recordCreationDate" type="dateDefinition"/>
<!--************************* <recordCreationDate> is a subelement <recordInfo> -->
<xs:element name="recordIdentifier" type="recordIdentifierDefinition"/>
<!--************************* <recordIdentifier> is a subelement <recordInfo> -->
<xs:element name="recordInfo" type="recordInfoDefinition"/>
<!--************************* <recordInfo> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="recordOrigin" type="xsString"/>
<!--************************* <recordOrigin> is a subelement <recordInfo> -->
<xs:element name="reformattingQuality" type="reformattingQualityDefinition"/>
<!--************************* <reformattingQuality> is a subelement <physicalDescription> -->
<xs:element name="region" type="xsString"/>
<!--************************* <region> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="relatedItem" type="relatedItemDefinition"/>
<!--************************* <relatedItem> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="role" type="roleDefinition"/>
<!--************************* <role> is a subelement <name> -->
<xs:element name="roleTerm" type="roleTermDefinition"/>
<!--************************* <role> is a subelement <roleTerm>, a subelement <name> -->
<xs:element name="scale" type="xsString"/>
<!--************************* <scale> is a subelement of <cartographics>, a subelement of <subject> -->
<xs:element name="scriptTerm" type="scriptTermDefinition"/>
<!--************************* <scriptTerm> is a subelement of <cartographics>, a subelement of <language> -->
<xs:element name="shelfLocator" type="xsString"/>
<!--************************* <shelfLocator> is a subelement of <copyInformation>, which is
a subelement of <holdingSimple>, which is a subelement of <location> -->
<xs:element name="start" type="xsString"/>
<!--************************* <start> is a subelement of <extent>, a subelement of part -->
<xs:element name="state" type="xsString"/>
<!--************************* <state> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="subject" type="subjectDefinition"/>
<!--************************* <subject> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="subLocation" type="xsString"/>
<!--************************* <subLocation> is a subelement of <copyInformation>, which is
a subelement of <holdingSimple>, which is a subelement of <location> -->
<xs:element name="subTitle" type="xsString"/>
<!--************************* <subTitle> is a subelement of <titleInfo> -->
<xs:element name="tableOfContents" type="tableOfContentsDefinition"/>
<!--************************* <tableOfContents> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="targetAudience" type="targetAudienceDefinition"/>
<!--************************* <targetAudience> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="temporal" type="temporalDefinition"/>
<!--************************* <temporal> is a subelement of <subject> -->
<xs:element name="territory" type="xsString"/>
<!--************************* <territory> is a subelement of <hierarchicalGeographic>, a subelement of <subject> -->
<xs:element name="text" type="unstructuredTextDefinition"/>
<!--************************* <text> is a subelement of <part> -->
<xs:element name="title" type="xsString"/>
<!--************************* <title> is a subelement of <titleInfo> -->
<xs:element name="titleInfo" type="titleInfoDefinition"/>
<!--************************* <titleInfo> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="topic" type="stringPlusAuthority"/>
<!--************************* <topic> is a subelement of <subject> -->
<xs:element name="total" type="xs:positiveInteger"/>
<!--************************* <total> is a subelement of <extent>, a subelement of <part> -->
<xs:element name="typeOfResource" type="typeOfResourceDefinition"/>
<!--************************* <typeOfResource> is a "top-level" element, i.e. a subelement of <mods> -->
<xs:element name="url" type="urlDefinition"/>
<!--************************* <url> is a subelement of <location> -->
<!--
******************** end of element declarations
*****************************************************************************************
*****************************************************************************************
********************************************************
Part 4: Auxiliary Definitions for Attributes
********************************************************
- Auxiliary types for attribute combinations
- Attribute Group Definitions
- Attribute definitions (simpleTypes)
-->
<!--
****************************************************
- Auxiliary types for attribute combinations
*****************************************************
-->
<!--
************************* stringPlusAuthority *************************
******** stringPlusAuthority in 3.3 was simply xs:string with an authority attribute.
******** in 3.4 there are two changes:
******** (1) the base is changed from xs:string to xsString.
******** This combines xs:string with the languageAttributeGroup:
******** lang, xml:lang, script and transliteration.
******** (2) the "authority", which was a single authority, is now an authorityGroup;
see "authorityAttributeGroup".
******** stringPlusAuthority is the base for a number of types defined in this schema (that immediately follow)
******** as well as several elements: <form>, <frequency>, <geographic>, <occupation>, recordContentSource>
******** and <topic>.
-->
<xs:complexType name="stringPlusAuthority">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attributeGroup ref="authorityAttributeGroup"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
************************* stringPlusSupplied *************************
******** stringPlusSupplied, new in 3.4, is the type for <edition>, <publisher>, and <extent>. In 3.4 for these three
******* elements the attribute "supplied" is added with the single value "yes".
-->
<xs:complexType name="stringPlusSupplied">
<xs:simpleContent>
<xs:extension base="xsString">
<xs:attribute name="supplied" type="yesDefinition"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
************************* stringPlusAuthorityPlusType *************************
******* stringPlusAuthorityPlusType is the base for a number of definitions (see following) as well as the type for element <form>
-->
<xs:complexType name="stringPlusAuthorityPlusType">
<xs:simpleContent>
<xs:extension base="stringPlusAuthority">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
************************* stringPlusAuthorityPlusTypePlusDisplayLabel *************************
******* stringPlusAuthorityPlusTypePlusDisplayLabel is the base for the next definition (see following)
******* as well as the type for element <genre>
-->
<xs:complexType name="stringPlusAuthorityPlusTypePlusDisplayLabel">
<xs:simpleContent>
<xs:extension base="stringPlusAuthorityPlusType">
<xs:attribute name="displayLabel" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
************************* stringPlusAuthorityPlusTypePlusDisplayLabelPlusXlink *************************
******* stringPlusAuthorityPlusTypePlusDisplayLabelPlusXlink is the type for element <physicalLocation>
-->
<xs:complexType name="stringPlusAuthorityPlusTypePlusDisplayLabelPlusXlink">
<xs:simpleContent>
<xs:extension base="stringPlusAuthorityPlusTypePlusDisplayLabel">
<xs:attributeGroup ref="xlink:simpleLink"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
********** xsString
************* xsString is new in version 3.4. The languageAttributeGroup
************* (lang, xml:lang, script and transliteration) applies now to every text element.
************* This is accomplished by changing "xs:string" to xsString wherever applicable,
************* essentially, everywhere, that xs:string occurred in 3.3 except for attributes,
************* extensions and restrictions.
-->
<xs:complexType name="xsString">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="languageAttributeGroup"/>
</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:attributeGroup ref="authorityAndValueURIAttributeGroup"/>
</xs:attributeGroup>
<!--
********** authorityAndValueURIAttributeGroup**********
-->
<xs:attributeGroup name="authorityAndValueURIAttributeGroup">
<xs:attribute name="authorityURI" type="xs:anyURI"/>
<xs:attribute name="valueURI" type="xs:anyURI"/>
<!-- New authorityURI attribute identifies a controlled vocabulary. New valueURI attribute identifies the specific value or term within the controlled vocabulary -->
</xs:attributeGroup>
<!--
********** placeAuthorityAttributeGroup **********
-->
<xs:attributeGroup name="placeAuthorityAttributeGroup">
<!-- new in 3.4 -->
<xs:attributeGroup ref="authorityAndValueURIAttributeGroup"/>
<xs:attribute name="authority" type="placeAuthorityAttributeDefinition"/>
</xs:attributeGroup>
<!--
********** languageAuthorityAttributeGroup **********
-->
<xs:attributeGroup name="languageAuthorityAttributeGroup">
<!-- new in 3.4 -->
<xs:attributeGroup ref="authorityAndValueURIAttributeGroup"/>
<xs:attribute name="authority" type="languageAuthorityAttributeDefinition"/>
</xs:attributeGroup>
<!--
********** idAuthorityXlinkLanguageDisplayLabelAttributeGroup **********
****** used by <name>, <subject>, and <titleInfo>
-->
<xs:attributeGroup name="idAuthorityXlinkLanguageDisplayLabelAttributeGroup">
<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: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>
<!--
********** languagePlusDisplayLabelAttributeGroup **********
-->
<xs:attributeGroup name="languagePlusDisplayLabelAttributeGroup">
<xs:attributeGroup ref="languageAttributeGroup"/>
<xs:attribute name="displayLabel" type="xs:string"/>
</xs:attributeGroup>
<!--
****************************************************
- Attribute definitions (simpleTypes)
*****************************************************
-->
<!--
********** codeOrTextDefinition
******** used by type attribute for elements that distinguish code from text:
******** <languageTerm>, <placeTerm>, <roleTerm>, <scriptTerm>
-->
<xs:simpleType name="codeOrTextDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="code"/>
<xs:enumeration value="text"/>
</xs:restriction>
</xs:simpleType>
<!--
************************************************************************************
-->
<!--
Following three - dateEncodingAttributeDefinition, datePointAttributeDefinition, dateQualifierAttributeDefinition -
are for the three attributes - "encoding", "qualifier", and "point", for dateBaseDefinition.
-->
<!--
********** dateEncodingAttributeDefinition
-->
<xs:simpleType name="dateEncodingAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="w3cdtf"/>
<xs:enumeration value="iso8601"/>
<xs:enumeration value="marc"/>
<!-- following two, "temper" and "edft", new in 3.4 -->
<xs:enumeration value="temper"/>
<xs:enumeration value="edtf"/>
</xs:restriction>
</xs:simpleType>
<!--
********** datePointAttributeDefinition
-->
<xs:simpleType name="datePointAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="start"/>
<xs:enumeration value="end"/>
</xs:restriction>
</xs:simpleType>
<!--
********** dateQualifierAttributeDefinition
-->
<xs:simpleType name="dateQualifierAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="approximate"/>
<xs:enumeration value="inferred"/>
<xs:enumeration value="questionable"/>
</xs:restriction>
</xs:simpleType>
<!--
************************************************************************************
-->
<!--
********** enumerationAndChronologyUnitTypeAttributeDefinition
******************* "unitType" attribute for <enumerationAndChronology>
-->
<xs:simpleType name="enumerationAndChronologyUnitTypeAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
<!--
************************* languageAuthorityAttributeDefinition
-->
<xs:simpleType name="languageAuthorityAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="rfc3066"/>
<xs:enumeration value="iso639-2b"/>
<xs:enumeration value="iso639-3"/>
<xs:enumeration value="rfc4646"/>
</xs:restriction>
</xs:simpleType>
<!--
**********modsVersionAttributeDefinition
************** "version" attribute of <mods>
******** The version attribute, now, in 3.4, enumerates all 3.x versions.
******** In earlier versions only the current (latest) version was allowed.
******** E.g. in version 3.3, the only allowable value for the version attribute was "3.3".
******** Henceforth for any version x.y, all values x.z where z is less than or
******** equal to y will be enumerated.
-->
<xs:simpleType name="modsVersionAttributeDefinition">
<xs:restriction base="xs:string">
<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>
<!--
********** namePartTypeAttributeDefinition
******* "type" attribute of <namePart>
-->
<xs:simpleType name="namePartTypeAttributeDefinition">
<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>
<!--
********** nameTypeAttributeDefinition
******** type attribute of <name>
-->
<xs:simpleType name="nameTypeAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="personal"/>
<xs:enumeration value="corporate"/>
<xs:enumeration value="conference"/>
<xs:enumeration value="family"/>
<!-- "family" is new in 3.4 -->
</xs:restriction>
</xs:simpleType>
<!--
********** noDefinition
************used by various attributes whose only values may be "no":
************ attribute "shareable" of <abstract>, <tableOfContents>
-->
<xs:simpleType name="noDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="no"/>
</xs:restriction>
</xs:simpleType>
<!--
********** placeAuthorityAttributeDefinition
used by authority attribute for placeDefinition and geographic **********
-->
<xs:simpleType name="placeAuthorityAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="marcgac"/>
<xs:enumeration value="marccountry"/>
<xs:enumeration value="iso3166"/>
</xs:restriction>
</xs:simpleType>
<!--
************* relatedItemTypeAttributeDefinition
-->
<xs:simpleType name="relatedItemTypeAttributeDefinition">
<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"/>
<!-- following two new in 3.4. -->
<xs:enumeration value="references"/>
<xs:enumeration value="reviewOf"/>
</xs:restriction>
</xs:simpleType>
<!--
***************titleInfoTypeAttributeDefinition ***********************
-->
<xs:simpleType name="titleInfoTypeAttributeDefinition">
<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>
<!--
********** urlAccessAttributeDefinition"**********
-->
<xs:simpleType name="urlAccessAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="preview"/>
<xs:enumeration value="raw object"/>
<xs:enumeration value="object in context"/>
</xs:restriction>
</xs:simpleType>
<!--
********** urlUsageAttributeDefinition"**********
******************** This definition is for the usage attribute as used by <url> (subelement of <location>)
******************** this note pertains both to this (urlUsageAttributeDefinition) and the following ( usageAttributeDefinition) definitions.
In earlier versions the usage attribute applied to element <url> (of <location>) only, and defined the single value "primary display".
In this version, 3.4, the usage attribute applies additionally to elements <classification>, <genre>, <language>, <subject>, <name>,<titleInfo>,
and <typeOfResource>.
However the value "primary display" is generalized to "primary", for these latter elements.
<url> retains the value "primary display" (for compatibility with earlier versions) although its use is depricated. So it has both values, "primary" and "primary display". For the other elements, only the value "primary" is valid.
Therefore, two definitions are needed for the usage attribute, one for <url> ("urlUsageAttributeDefinition") and one for the other elements ("usageAttributeDefinition")
-->
<xs:simpleType name="urlUsageAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="primary display"/>
<xs:enumeration value="primary"/>
</xs:restriction>
</xs:simpleType>
<!--
********** usageAttributeDefinition"**********
******************** See note above with urlUsageAttributeDefinition.
******************** This definition is for the usage attribute as used by <classification>, <genre>, <language>, <subject>, <name>,<titleInfo>, <typeOfResource>
-->
<xs:simpleType name="usageAttributeDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="primary"/>
</xs:restriction>
</xs:simpleType>
<!--
********** yesDefinition
******************* yesDefinition used by various attributes whose only values may be "yes":
"invalid" for <identifier>
"supplied" for <titleInfo>
"collection" for <typeOfResource>
"manuscript" for <typeOfResource>
"keyDate" for <date>
"supplied" for <place>, <edition>, <publisher>, <extent>
-->
<xs:simpleType name="yesDefinition">
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
</xs:schema>