<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document     : TimePeriodDirectorySchemaV7.xsd
    Created on   : April 21, 2005
    Last modified: October 14, 2005
    Author       : mmeiske, vpetras
    Description  : To describe the structure of a Time Period Directory 
    		   containing records describing events or named time 
    		   periods, associated dates and places, the time period
    		   type and related periods.        
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:ns="http://xml.netbeans.org/examples/targetNS" 
            targetNamespace="http://xml.netbeans.org/examples/targetNS"
            xmlns="http://xml.netbeans.org/examples/targetNS" 
            elementFormDefault="qualified">
            
    <xsd:simpleType name="stringtype">
       <xsd:restriction base="xsd:string"/>
    </xsd:simpleType> 
 
<!-- ==================================================================== -->
<!-- Root entry element is the timePeriodDirectory. 
	It contains all Time Period Directory records. 			  -->
<!-- ==================================================================== -->
   
   <xsd:complexType name="timePeriodDirectory">
       <xsd:sequence>
         <xsd:element name="timePeriodEntry" type="timePeriodEntryType" maxOccurs="unbounded" minOccurs="1"/>
       </xsd:sequence>  
   </xsd:complexType>    
         
<!-- ==================================================================== -->
<!-- Every timePeriodEntry record has 8 components:			  -->
<!--	1. periodID = unique identifier of record			  -->
<!-- 	2. periodName = names and alternative names of period or event	  -->
<!--	3. descriptiveNotes						  -->
<!--	4. dates = describes begin and end date & calendar		  -->
<!--	5. periodClassification = describes period type (e.g. war, reign) -->
<!--	6. location = location name, location identifier		  -->
<!--	7. relatedPeriod						  -->
<!--	8. entryMetadata						  -->	
<!-- ==================================================================== -->    
   
   <xsd:complexType name="timePeriodEntryType">
      <xsd:sequence>
        <xsd:element name="periodID" type="ns:idType" />
        <xsd:element name="periodName" type="ns:nameType" maxOccurs="unbounded" minOccurs="1" />
        <xsd:element name="descriptiveNotes" type="ns:notesType" minOccurs="0" />
        <xsd:element name="dates" type="ns:datesType" />
        <xsd:element name="periodClassification" type="ns:classificationType" maxOccurs="unbounded" />
        <xsd:element name="location" type="ns:locationType" maxOccurs="unbounded" />
        <xsd:element name="relatedPeriod" type="ns:relationshipType" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="entryMetadata" type="ns:entryMetadataType" />
     </xsd:sequence>
   </xsd:complexType>
 
<!-- ==================================================================== -->
<!-- 1. periodID							  -->
<!-- ==================================================================== --> 
 
   <xsd:simpleType name="idType">
    <xsd:restriction base="ns:stringtype" />
   </xsd:simpleType>
 
<!-- ==================================================================== -->
<!-- 2. periodName							  -->
<!-- ==================================================================== --> 
 
   <xsd:complexType name="nameType">
      <xsd:sequence>
        <xsd:element name="name" type="ns:stringtype" />
        <xsd:element name="language" type="ns:languageType" />
        <xsd:element name="script" type="ns:scriptType" />
        <xsd:element name="transliterationScheme" type="ns:schemeType" minOccurs="0" />
        <xsd:element name="sources" type="ns:sourcesType" minOccurs="0" />
        <xsd:element name="notes" type="ns:notesType" minOccurs="0" />
      </xsd:sequence>
   </xsd:complexType>
   
   <xsd:complexType name="languageType">
      <xsd:sequence>
        <xsd:element name="languageCode" type="ns:stringtype" />
        <xsd:element name="languageScheme" type="ns:schemeType" />
      </xsd:sequence>
   </xsd:complexType>
   
   <xsd:complexType name="scriptType">
      <xsd:sequence>  
        <xsd:element name="scriptCode" type="ns:stringtype" />
        <xsd:element name="scriptScheme" type="ns:schemeType" minOccurs="0"/>
      </xsd:sequence>
   </xsd:complexType>
   
   <xsd:complexType name="schemeType">
      <xsd:sequence>
        <xsd:element name="schemeName" type="ns:stringtype" />
        <xsd:element name="schemeAbbreviation" type="ns:stringtype" minOccurs="0" />
        <xsd:element name="schemeVersion" type="ns:stringtype" />
        <xsd:element name="sources" type="ns:sourcesType" minOccurs="0" />
      </xsd:sequence>
    </xsd:complexType>

 <!-- schemeType is also used in dates, periodClassification and location. -->
   
   <xsd:complexType name="notesType">
      <xsd:sequence>
          <xsd:element name="note" minOccurs="1" maxOccurs="unbounded" />
      </xsd:sequence>
   </xsd:complexType>
   
 <!-- The element descriptiveNotes is also a notesType element. notesType is also used in dates, 
      location and entryMetadata -->
   
   <xsd:complexType name="sourcesType">
      <xsd:sequence>
        <xsd:element name="source" minOccurs="1" maxOccurs="unbounded" />
      </xsd:sequence>
   </xsd:complexType>
   
 <!-- sourcesType is also used in dates. -->  
   
<!-- ==================================================================== -->
<!-- 4. dates								  -->
<!-- ==================================================================== -->

   <xsd:complexType name="datesType">
      <xsd:sequence>
	<xsd:element name="calendar" type="ns:calendarType" />
        <xsd:element name="dateFormat" type="ns:schemeType" />
        <xsd:element name="beginDate" type="ns:dateType" maxOccurs="unbounded" />
        <xsd:element name="endDate" type="ns:dateType" maxOccurs="unbounded" />
        <xsd:element name="notes" type="ns:notesType" minOccurs="0" />
        <xsd:element name="sources" type="ns:sourcesType" minOccurs="0" />
      </xsd:sequence>
   </xsd:complexType>
   
   <xsd:complexType name="calendarType">
        <xsd:sequence>
           <xsd:element name="calendarName" type="ns:stringtype" />
           <xsd:element name="notes" type="ns:notesType" minOccurs="0"  />
           <xsd:element name="sources" type="ns:sourcesType" minOccurs="0" />
        </xsd:sequence>
   </xsd:complexType>
   
   <xsd:complexType name="dateType">
        <xsd:attribute name="dateQualifier" type="ns:dateQualifierType" />
   </xsd:complexType>
   
   <xsd:simpleType name="dateQualifierType">
      <xsd:restriction base="ns:stringtype">
        <xsd:enumeration value="exact" />
        <xsd:enumeration value="earliest" />
        <xsd:enumeration value="latest" />
        <xsd:enumeration value="most-likely" />
        <xsd:enumeration value="advocated-by-source" />
        <xsd:enumeration value="ongoing" />
      </xsd:restriction>
   </xsd:simpleType>

<!-- ==================================================================== -->
<!-- 5. periodClassification						  -->
<!-- ==================================================================== -->
   
   <xsd:complexType name="classificationType">
     <xsd:sequence>
       <xsd:element name="classificationTerm" type="ns:stringtype" maxOccurs="unbounded" />
       <xsd:element name="classificationScheme" type="ns:schemeType" />
     </xsd:sequence>
   </xsd:complexType>

<!-- ==================================================================== -->
<!-- 6. location							  -->
<!-- ==================================================================== -->
   
   <xsd:complexType name="locationType">
      <xsd:sequence>  
              <xsd:element name="locationName" type="xsd:string" />
              <xsd:element name="locationSchemeId" type="idType" />
              <xsd:element name="locationScheme" type="schemeType" />
              <xsd:element name="notes" type="ns:notesType" minOccurs="0" />
     </xsd:sequence>
   </xsd:complexType>

<!-- ==================================================================== -->
<!-- 7. relatedPeriod							  -->
<!-- ==================================================================== -->
   
   <xsd:complexType name="relationshipType">
      <xsd:sequence>
        <xsd:element name="periodEntryID" type="ns:idType" />
        <xsd:element name="relationshipClassification" type="ns:classificationType" />
      </xsd:sequence>
   </xsd:complexType>

<!-- ==================================================================== -->
<!-- 8. entryMetadata							  -->
<!-- ==================================================================== -->
    
  <xsd:complexType name="entryMetadataType">
    <xsd:sequence>
        <xsd:element name="entryNote" type="ns:notesType" minOccurs="0" />
        <xsd:element name="entryDate" type="xsd:date" />
        <xsd:element name="modificationDate" type="xsd:date" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  
</xsd:schema>

