[osis-core] Latest Draft of Schema

Patrick Durusau osis-core@bibletechnologieswg.org
Tue, 21 May 2002 00:03:37 -0400


This is a multi-part message in MIME format.
--------------050500020905080703050309
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Suggestion: with all the changes and modifications, lets limit each post
   on the latest version to one element or attribute whenever possible.
That will help me keep track of the discussion and any changes that we
need to make. I should have most of Thursday afternoon and Friday
evening (my presentation and following meetings consume most of
tomorrow, Wednesday for me already).

Guys,

Well, after much delay and not a little hard work, I finally have a
candidate release for OSIS 1.1!

I have added a lot of notes to the schema to try to make it a little
clearer on the first read.

A couple of major points to note:

Regex is still broken but I am working to fix it. Did not want to delay 
shipping it to you because I can't seem to find the error in the 
non-standard regex expression.

Reference Syntax:

The regexes for the reference system are in place but basically
constrain the syntax of grain and reference but not their content. I
have spent the better part of a day trying to devise a system that
allows all the possible alternative reference systems with this syntax
and came up dry. The problem is that if we require say
book.chapter.verse for osisref, what do I do with references to Plutarch
that have only a book and section number? In part it is a problem of
trying to be a reference syntax and content validation rolled into one.

One possible approach is to allow the schema to handle the syntax of the
reference validation and have the content validation (data type in
schema land) handled by a separate process, perhaps even a perl script.
To some degree schemas can do both syntax and content (read data type)
validation but only because they are in a universe of a very controlled
set of data types.

Note that the syntax for the osisRef data type:

(([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*)?)

Allows you to have up to six (6) non-whitespace character strings
separated by the period for a reference.

I used the same syntax for work (osisRef being a data type) so that we
could validate the syntax of references to a work.

Syntax for osisGrain:

(char:([Nd]*)+([Nd]*)\((^\s)*\) | ((^\s)*)

Follows Steve's suggestion but with the addition of a string as an
alternative to allow for alternative (XPath?) addressing of grains.

Corpus vs. Text

I have added a higher level container element, osis, which has a choice
of either being followed by osisCorpus, which contains an unlimited
number of osisText(s), or simply being followed by osisText.

Let's try to get some texts into this so we can determine if there are
any hidden bugs about to bite us! I would really like to put this to bed
so we can move onto producing texts and getting some work done on the
rest of the materials.

Hope this finds one and all in good health and spirits!

Patrick

-- 
Patrick Durusau
Director of Research and Development
Society of Biblical Literature
pdurusau@emory.edu




--------------050500020905080703050309
Content-Type: text/xml;
 name="OSISCore_1.test5.xsd"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="OSISCore_1.test5.xsd"

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

	elementFormDefault="unqualified">





<!-- note that I have added a higher level root element so we can have collections of independent texts for a collection -->



<xs:element name="osis">

	    <xs:complexType>

		<xs:choice>

			<xs:element ref="osisCorpus"/>

			<xs:element ref="osisText"/>

		</xs:choice>

	    </xs:complexType>

</xs:element>



<xs:element name="osisCorpus">

	    <xs:complexType>

		<xs:sequence minOccurs="1" maxOccurs="unbounded">

			<xs:element ref="osisText"/>

		</xs:sequence>

	    </xs:complexType>

</xs:element>



<xs:element name="osisText">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="header" minOccurs="1" maxOccurs="1"/>

			<xs:element ref="front" minOccurs="0" maxOccurs="1"/>

			<xs:element ref="body" minOccurs="1" maxOccurs="1"/>

			<xs:element ref="back" minOccurs="0" maxOccurs="1"/>

		</xs:sequence>

			<xs:attribute name="work" type="osisRef" use="optional"/>

			<xs:attribute name="refSys" type="osisRef" use="optional"/>

			<xs:attributeGroup ref="globalAttributes"/>

	</xs:complexType>

</xs:element>



<xs:element name="header">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="title" minOccurs="0"/>

			<xs:element ref="contributor" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="creator" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="subject" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="description" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="publisher" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="type" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="format" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="identifier" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="source" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="language" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="relation" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="coverage" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="rights" minOccurs="0" maxOccurs="unbounded"/>

			<xs:element name="revisionDesc" minOccurs="0" maxOccurs="unbounded"/>

		</xs:sequence>

	</xs:complexType>

</xs:element>



<!-- elements for header, with exception of title -->



<xs:element name="contributor">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="creator">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attribute name="role" type="roleType" use="optional"/>

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="subject">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="description">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="publisher">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="type">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="format">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="identifier">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="source">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="language">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="relation">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="coverage">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="rights">

	<xs:complexType>

		<xs:simpleContent> 	

			<xs:extension base="xs:string">

				<xs:attributeGroup ref="globalAttributes"/>

			</xs:extension>

		</xs:simpleContent>

	</xs:complexType>

</xs:element>



<xs:element name="revisionDesc">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="date" minOccurs="1"/>

			<xs:element ref="p" maxOccurs="unbounded"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

		<xs:attribute name="TEIform" fixed="revisionDesc"/>

	</xs:complexType>

</xs:element>





<!-- end of header elements -->



<!-- major structural elements -->



<!-- note that title recurs (within title) so even though only one title element, can have as many subtitles as desired -->

<!-- Todd has noted that since the content models for front, body and back are the same that we could handle these with a common element with an attribute for those divisions. I tend to agree but suspect it will be easier to explain if we retain the semantics of having different elements names for these divisions. -->



<xs:element name="front">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="title" minOccurs="0"/>

			<xs:element ref="div" minOccurs="1" maxOccurs="unbounded"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

	</xs:complexType>

</xs:element>



<xs:element name="body">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="title" minOccurs="0"/>

			<xs:element ref="div" maxOccurs="unbounded"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

		<xs:attribute name="TEIform" fixed="body"/>

	</xs:complexType>

</xs:element>

	

<xs:element name="back">

	<xs:complexType>

		<xs:sequence>

			<xs:element ref="title" minOccurs="0"/>

			<xs:element ref="div" maxOccurs="unbounded"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

		<xs:attribute name="TEIform" fixed="back"/>

	</xs:complexType>

</xs:element>



<!-- end of major structural elements -->



<!-- abbr element contains abbreviations and expansion of abbreviations is carried in the expansion attribute. Note allowed since people may want to annotate the abbreviation with other information. Have allowed unbounded number of notes, probably should be the general case for notes as there is no way to anticipate how many notes any text may have at a given point. Can be changed for validation in particular production environments -->



<xs:element name="abbr">

	    <xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

		</xs:sequence>

		<xs:attribute name="expansion" type="xs:string"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>





<!-- blockQuote is a child of blockQuote, div and p. Can contain p which form part of the blockQuote. If used to surround verses for denoting blockQuote, use next/prev attributes on verses to span the close of the blockQuote element -->



<xs:element name="blockQuote">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="close"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="p"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="salute"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="speaker"/>

			   <xs:element ref="speech"/>

			   <xs:element ref="transChange"/>

			   <xs:element ref="verse"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

		<xs:attributeGroup ref="outReferenceAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- caption is used within figure to contain short descriptive information that may appear with an illustration, photo or other illustration - caption is allowed to contain abbr, foreign, name, note, q, reference --> 



<xs:element name="caption">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- catchWord is used to contain text in a note that is part of the main text and used to alert the reader to the materila from the main text that is under discussion. may contain PCDATA and note. -->



<xs:element name="catchWord">

	    <xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

		</xs:sequence>

		<xs:attribute name="expansion" type="xs:string"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- close is a child of div and blockQuote, meant to deal with close of letters (Pauline for example) -->



<xs:element name="close">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="divineName"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="p"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="verse"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="expansion" type="xs:string"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- date includes note for cases where in addition to recording the calendar type, the encoder wishes to make some other claim about the date -->



<xs:element name="date">

	    <xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

		</xs:sequence>

		<xs:attribute name="calendarType" type="calendar" use="optional" default="ISO"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- div is the largest generic container below the main structural elements - should be used for subsections in commentaries and the like -->



<xs:element name="div">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="blockQuote"/>

			   <xs:element ref="figure"/>

			   <xs:element ref="lineGroup"/>

			   <xs:element ref="list"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="p"/>

			   <xs:element ref="q"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="title"/>

			   <xs:element ref="verse"/>

		</xs:choice>

			<xs:attribute name="divType" type="divType" use="optional"/>

			<xs:attribute name="divTitle" type="xs:string" use="optional"/>

			<xs:attributeGroup ref="inReferenceAttributes"/>

			<xs:attributeGroup ref="globalAttributes"/>

			<xs:attribute name="TEIform" fixed="div"/>

	    </xs:complexType>

</xs:element>



<!-- used to mark occurrences of the divine name, the treatment of which varies from tradtional to tradition. The type attribute should be used if the encoder wishes to create a typology of of the divine name as found or translated in the text. -->



<xs:element name="divineName">

	    <xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- figure contains only an optional caption element - the source for the figure should be specified using the src attribute -->



<xs:element name="figure">

	    <xs:complexType>

		<xs:sequence minOccurs="0">

			   <xs:element ref="caption"/>

		</xs:sequence>

		<xs:attribute name="src" type="xs:string"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- foreign is used to mark foreign words or phrases that occur in a text. such words are usually offset from the main text by quotes or italics but that is a function of styling and not reflected in the attributes to this element, i.e., no rend, sorry Chris! -->



<xs:element name="foreign">

	<xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			<xs:element ref="note"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

	</xs:complexType>

</xs:element>





<!-- head, allowed in list only, does recur so can have multiple level of headings for a list, note that list recurs as well -->



<xs:element name="head">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="head"/>

			   <xs:element ref="note"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- inscription, fairly low level element to record short inscriptions, should not be used for quotes -->



<xs:element name="inscription">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- item is solely a child of list and contains mixed content, note and w -->



<xs:element name="item">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- label, optional element in list -->



<xs:element name="label">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- line is a member of lineGroup and should be used for poetic sections, not the recording of orthographic lines, such as when encoding a manuscript witness. markup for recording original mss. will be included in the scholarly module. Note that line can include a verse and this is the most likely place for crossing boundaries where verses will need to be split to cross line boundaries. -->



<xs:element name="line">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="speaker"/>

			   <xs:element ref="transChange"/>

			   <xs:element ref="verse"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- lineGroup is a container element for line. use for poetic texts and embed verses, by splitting them, into the line elements --> 



<xs:element name="lineGroup">

	    <xs:complexType>

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="line"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- list, allowed to recur for embedded lists -->



<xs:element name="list">

	    <xs:complexType mixed="true">

		<xs:sequence minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="label" minOccurs="0" maxOccurs="1"/>

			   <xs:element ref="item" minOccurs="1" maxOccurs="1"/>

		</xs:sequence>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- mentioned -->



<xs:element name="mentioned">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="date"/>

			   <xs:element ref="divineName"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- milestone, true milestone so no begin/end -->



<xs:element name="milestone">

	    <xs:complexType>

		<xs:attributeGroup ref="inReferenceAttributes"/>

		<xs:attributeGroup ref="globalAttributes"/>

	    </xs:complexType>

</xs:element>  



<!-- name is used to mark any variety of names, such as person, geographic, festival, etc. -->



<xs:element name="name">

	    <xs:complexType mixed="true">

		<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="nameType" type="nameType" use="required"/>

		<xs:attribute name="regular" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- note is used inline to record notes about a particular text - note has attributes that allow the attachment of the note to a particular place or passage in the text -->



<xs:element name="note">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="p"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reading"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="verse"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- the standard paragraph container element -->



<xs:element name="p">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="blockQuote"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="inscription"/>

			   <xs:element ref="mentioned"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="salute"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="speaker"/>

			   <xs:element ref="speech"/>

			   <xs:element ref="verse"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>





<!-- note that q does not allow verse. In secondary materials where a verse is being quoted by a speaker, for example, it whould be encoded as a reference with the appropriate attributes -->



<xs:element name="q">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="qID" type="xs:string"/>

		<xs:attribute name="next" type="xs:string" use="optional"/>

		<xs:attribute name="prev" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

	   <xs:key name="prevQKey">

		   <xs:selector xpath=".//q"/>

		   <xs:field xpath="@qID"/>

	   </xs:key>

	   <xs:keyref name="prevQRef" refer="prevQKey">

		   <xs:selector xpath=".//q"/>

		   <xs:field xpath="@prev"/>

	   </xs:keyref>

</xs:element>



<!-- reading occurs only in note, records alternative readings -->



<xs:element name="reading">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- reference is used to mark any reference in a text to another, whether direct or an allusion. The type of reference being should be classified by the encoder. References from the NT to passages in the OT would be examples of a reference. -->



<xs:element name="reference">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- salute occurs in both blockQuote as well as p since encoders may choose to use different mechanisms contain material where a salute occurs -->



<xs:element name="salute">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- seg is a generic container element that can contain phrase level elements -->



<xs:element name="seg">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="segID" type="xs:string"/>

		<xs:attribute name="next" type="xs:string" use="optional"/>

		<xs:attribute name="prev" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

	   <xs:key name="prevSegKey">

		   <xs:selector xpath=".//seg"/>

		   <xs:field xpath="@segID"/>

	   </xs:key>

	   <xs:keyref name="prevSegRef" refer="prevSegKey">

		   <xs:selector xpath=".//seg"/>

		   <xs:field xpath="@prev"/>

	   </xs:keyref>

</xs:element>



<!-- signed is used to record the ending of a text where the author indicates that they have issued a particular work -->



<xs:element name="signed">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- speaker will usually have content but is not required to do so, shifts in the character in poetic dialogue may not be explicitly marked in a text but the encoder wishes to make a claim about such speakers -->



<xs:element name="speaker">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="reference"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- speech is used to mark direct speeches, reported speeches should be recorded using the q element -->



<xs:element name="speech">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="blockQuote"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="inscription"/>

			   <xs:element ref="mentioned"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="salute"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="speaker"/>

			   <xs:element ref="speech"/>

			   <xs:element ref="verse"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="speechID" type="xs:string"/>

		<xs:attribute name="next" type="xs:string" use="optional"/>

		<xs:attribute name="prev" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

	   <xs:key name="prevSpeechKey">

		   <xs:selector xpath=".//speech"/>

		   <xs:field xpath="@speechID"/>

	   </xs:key>

	   <xs:keyref name="prevSpeechRef" refer="prevSpeechKey">

		   <xs:selector xpath=".//speech"/>

		   <xs:field xpath="@prev"/>

	   </xs:keyref>

</xs:element>



<!-- title occurs as child of div only - recurs so can use for subtitles - some smaller elements for common parts of title -->



<xs:element name="title">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="title"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attributeGroup ref="globalAttributes"/>

		<xs:attribute name="TEIform" fixed="title"/>

	   </xs:complexType>

</xs:element>



<!-- transChange is used to encode material not thought to be part of the original language in a translation - use attributes to indicate a typology of the change -->



<xs:element name="transChange">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="changeType" type="changeType" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- note that I have added the key/keyRef to allow the spliting of a verse across boundaries where necessary. The key/keyRef mechanism requires that the key be non-nillable, in other words required. Rather than make another attribute group for global attributes or require IDs everywhere, I simply added the verseID attribute and it is required on all elements. Note that the next attribute has only an informative function. -->



<xs:element name="verse">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="abbr"/>

			   <xs:element ref="foreign"/>

			   <xs:element ref="inscription"/>

			   <xs:element ref="milestone"/>

			   <xs:element ref="name"/>

			   <xs:element ref="note"/>

			   <xs:element ref="q"/>

			   <xs:element ref="reference"/>

			   <xs:element ref="seg"/>

			   <xs:element ref="speaker"/>

			   <xs:element ref="w"/>

		</xs:choice>

		<xs:attribute name="verseID" type="xs:string"/>

		<xs:attribute name="next" type="xs:string" use="optional"/>

		<xs:attribute name="prev" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

	   <xs:key name="prevVerseKey">

		   <xs:selector xpath=".//verse"/>

		   <xs:field xpath="@verseID"/>

	   </xs:key>

	   <xs:keyref name="prevVerseRef" refer="prevVerseKey">

		   <xs:selector xpath=".//verse"/>

		   <xs:field xpath="@prev"/>

	   </xs:keyref>

</xs:element>



<!-- word is used to mark the smallest unit of text, generally in Western literature seen as a token separated by white space - has attributes to carry Strong's numbers. -->



<xs:element name="w">

	    <xs:complexType mixed="true">

	    	<xs:choice minOccurs="0" maxOccurs="unbounded">

			   <xs:element ref="note"/>

			   <xs:element ref="seg"/>

		</xs:choice>

		<xs:attribute name="POS" type="attributeExtension" use="optional"/>

		<xs:attribute name="morph" type="attributeExtension" use="optional"/>

		<xs:attribute name="lemma" type="attributeExtension" use="optional"/>

		<xs:attribute name="gloss" type="xs:string" use="optional"/>

		<xs:attribute name="xlit" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="globalAttributes"/>

	   </xs:complexType>

</xs:element>



<!-- attributes -->



<xs:attributeGroup name="globalAttributes">

		<xs:attribute name="ews" type="xs:string" use="optional"/>

		<xs:attribute name="ID" type="xs:ID" use="optional"/>

		<xs:attribute name="lang" type="xs:string" use="optional"/>

		<xs:attribute name="resp" type="xs:string" use="optional"/>

		<xs:attribute name="type" type="xs:string" use="optional"/>

		<xs:attribute name="n" type="xs:string" use="optional"/>

		<xs:attributeGroup ref="inReferenceAttributes"/>

		<xs:attributeGroup ref="outReferenceAttributes"/>

</xs:attributeGroup>



<!-- note that for the various simple types I have only defined the regexes as suggested by Steve. For further validation, those values, particulary osisWork and osisRef should be overidden by additional declarations. avoids trying to solve the referce system question based upon inadequate information -->



<xs:attributeGroup name="inReferenceAttributes">

	<xs:attribute name="work" type="osisRef" use="optional"/>

	<xs:attribute name="cite" type="osisRef" use="optional"/>

	<xs:attribute name="grain" type="osisGrain" use="optional"/>

</xs:attributeGroup>	



<xs:attributeGroup name="outReferenceAttributes">

	<xs:attribute name="outWork" type="osisRef" use="optional"/>

	<xs:attribute name="outCite" type="osisRef" use="optional"/>

	<xs:attribute name="outGrain" type="osisGrain" use="optional"/>

</xs:attributeGroup>





<!-- simple types -->



<xs:simpleType name="attributeExtension">

	<xs:restriction base="xs:string">

		<xs:pattern value="x-([^\s]+)"/>

	</xs:restriction>

</xs:simpleType>



<xs:simpleType name="calendar">

	<xs:restriction base="xs:string">

		<xs:enumeration value="Chinese"/>

		<xs:enumeration value="Gregorian"/>

		<xs:enumeration value="Islamic"/>

		<xs:enumeration value="ISO"/>

		<xs:enumeration value="Jewish"/>

		<xs:enumeration value="Julian"/>

	</xs:restriction>

</xs:simpleType>



<xs:simpleType name="changesOSIS">

	       <xs:restriction base="xs:string">

		<xs:enumeration value="added"/>

		<xs:enumeration value="amplified"/>

		<xs:enumeration value="changed"/>

		<xs:enumeration value="deleted"/>

		<xs:enumeration value="moved"/>

	       </xs:restriction>

</xs:simpleType>

		

<xs:simpleType name="changeType">

	<xs:union memberTypes="changesOSIS attributeExtension"/>

</xs:simpleType>



<xs:simpleType name="divsOSIS">

	<xs:restriction base="xs:string">

		<xs:enumeration value="appendix"/>

		<xs:enumeration value="book"/>

		<xs:enumeration value="chapter"/>

		<xs:enumeration value="concordance"/>

		<xs:enumeration value="glossary"/>

	</xs:restriction>

</xs:simpleType>



<xs:simpleType name="divType">

	<xs:union memberTypes="divsOSIS attributeExtension"/>

</xs:simpleType>



<xs:simpleType name="languageType">

		<xs:restriction base="xs:string">

			<xs:pattern value="(x|i|[A-Za-z]{2,3})(-[A-Za-z0-9]{2,8}){0,}"/>

		</xs:restriction>

	</xs:simpleType>



<xs:simpleType name="namesOSIS">

	<xs:annotation>

		<xs:documentation>

			<p>Enumerated list of name types commonly found in biblical texts.</p>

			<p>The attribute nonhuman was inserted to allow the marking of names that are not encoded with the element divineName. The divineName element was introduced to treat name occurences that are treated differently, i.e., the setting of Lord in small caps, to represent a name in the original text. Rather than attempt to enumerate all the varying traditions for such practices, the divineName element simply recognizes it and allows encoders to follow that practice (or not) as they desire.</p>

		</xs:documentation>

	</xs:annotation>

	<xs:restriction base="xs:string">

		<xs:enumeration value="geographic"/>

		<xs:enumeration value="holiday"/>

		<xs:enumeration value="nonhuman"/>

		<xs:enumeration value="person"/>

		<xs:enumeration value="ritual"/>

	</xs:restriction>

</xs:simpleType>



<xs:simpleType name="nameType">

	<xs:union memberTypes="namesOSIS attributeExtension"/>

</xs:simpleType>



<xs:simpleType name="notesOSIS">

	<xs:restriction base="xs:string">

		<xs:enumeration value="allusion"/>

		<xs:enumeration value="alternative"/>

		<xs:enumeration value="background"/>

		<xs:enumeration value="citation"/>

		<xs:enumeration value="devotional"/>

		<xs:enumeration value="exegesis"/>

		<xs:enumeration value="explanation"/>

		<xs:enumeration value="study"/>

		<xs:enumeration value="translation"/>

		<xs:enumeration value="variant"/>

	</xs:restriction>

</xs:simpleType>



<xs:simpleType name="noteType">

	<xs:union memberTypes="notesOSIS attributeExtension"/>

</xs:simpleType>





<!-- query to Steve, shouldn't grain do the duty of range? Can be character count but also other meaningful (in the reference system) grain? -->



<xs:simpleType name="osisGrain">

	       <xs:restriction base="xs:string">

		  <xs:pattern value="(char:([Nd]*)\+([Nd]*)\(([^\s]*)\) | ([^\s]*)"/>

	       </xs:restriction>

</xs:simpleType>





<xs:simpleType name="osisRef">

	<xs:restriction base="xs:string">

		<xs:pattern value="(([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*\.)?([^\s]*)?)"/>

	</xs:restriction>

</xs:simpleType>







	<xs:simpleType name="roleOSIS">

		<xs:annotation>

			<xs:documentation>

				<p>This is a selected set of the most common role names likely to be needed for basic encoding. The full set of relator codes on which this listing (and the descriptions are based, was taken from: MARC Code List: Relator Codes -- Term Sequence (http://lcweb.loc.gov/marc/relators/re0002r1.html). This listing will be followed for later OSIS modules.</p>

			</xs:documentation>

		</xs:annotation>

		<xs:restriction base="xs:string">

			<xs:enumeration value="adp">

				<xs:annotation>

					<xs:documentation>Adapter: Use for a person who 1) reworks a musical composition,usually for a different medium, or 2) rewrites novels or stories for motionpictures or other audiovisual medium.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="ann">

				<xs:annotation>

					<xs:documentation>Annotator: Use for a person who writes manuscript annotations on a printed item.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="art">

				<xs:annotation>

					<xs:documentation>Artist: Use for a person (e.g., a painter) who conceives, and perhaps also implements, an original graphic design or work of art, </xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="aut">

				<xs:annotation>

					<xs:documentation>Author: Use for a person or corporate body chiefly responsiblefor the intellectual or artistic content of a work, usually printed text.  This term may also be used when more than one person or body bears such responsibility.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="aqt">

				<xs:annotation>

					<xs:documentation>Author in quotations or text extracts: Use for a person whose work is largely quoted or extracted in a works to which he or she did not contribute directly.  Such quotations are found particularly in exhibition catalogs, collections of photographs, etc.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="aft">

				<xs:annotation>

					<xs:documentation>Author of afterword, colophon, etc.: Use for a person or corporate body responsible for an afterword, postface, colophon, etc. but who isnot the chief author of a work.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="aui">

				<xs:annotation>

					<xs:documentation>Author of introduction, etc.: Use for a person or corporate body responsible for an introduction, preface, foreword, or other critical introductory matter, but who is not the chief author.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bnd">

				<xs:annotation>

					<xs:documentation>Binder: </xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bdd">

				<xs:annotation>

					<xs:documentation>Binding designer:  Designer of binding</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bkd">

				<xs:annotation>

					<xs:documentation>Book designer: Use for the person or firm responsible for the entire graphic design of a book, including arrangement of type and illustration,choice of materials, and process used.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bkp">

				<xs:annotation>

					<xs:documentation>Book producer: Use for the person or firm responsible for the production of books and other print media, if specific codes</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bjd">

				<xs:annotation>

					<xs:documentation>Bookjacket designer:  Designer of bookjacket</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="bpd">

				<xs:annotation>

					<xs:documentation>Bookplate designer: Designer of bookplate</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="ctg">

				<xs:annotation>

					<xs:documentation>Cartographer: </xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="clb">

				<xs:annotation>

					<xs:documentation>Collaborator: Use for a person or corporate body that takes a limited part in the elaboration of a work of another person or corporate body that brings complements (e.g., appendices, notes) to the work.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="cmm">

				<xs:annotation>

					<xs:documentation>Commentator: Use for a person who provides interpretation, analysis,or a discussion of the subject matter on a recording, motion picture, or other audiovisual medium.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="cwt">

				<xs:annotation>

					<xs:documentation>Commentator for written text: Use for a person or corporate body responsible for the commentary or explanatory notes about a text.  For the writer of manuscript annotations in a printed book, use Annotator</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="com">

				<xs:annotation>

					<xs:documentation>Compiler: Use for a person who produces a work or publication by selecting and putting together material from the works of various persons or bodies.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="ctb">

				<xs:annotation>

					<xs:documentation>Contributor: Use for one whose work has been contributed to a larger work, such as an anthology, serial publication, or other compilation of individual works. Do not use for someone whose sole function in relation to a work is as author, editor, compiler or translator.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="cre">

				<xs:annotation>

					<xs:documentation>Creator: Use for a person or corporate body responsible for the intellectual or artistic content of a work.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="edt">

				<xs:annotation>

					<xs:documentation>Editor: Use for a person who prepares for publication a work not primarily his/her own, such as by elucidating text, adding introductory or other critical matter, or technically directing an editorial staff.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="ilu">

				<xs:annotation>

					<xs:documentation>Illuminator: </xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="ill">

				<xs:annotation>

					<xs:documentation>Illustrator: Use for the person who conceives, and perhaps also implements, a design or illustration, usually to accompany a written text.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="pbl">

				<xs:annotation>

					<xs:documentation>Publisher: </xs:documentation>

				</xs:annotation>

			</xs:enumeration>

			<xs:enumeration value="trl">

				<xs:annotation>

					<xs:documentation>Translator: Use for a person who renders a text from one language into another, or from an older form of a language into the modern form.</xs:documentation>

				</xs:annotation>

			</xs:enumeration>

		</xs:restriction>

	</xs:simpleType>



<xs:simpleType name="roleType">

	<xs:union memberTypes="roleOSIS attributeExtension"/>

</xs:simpleType>



</xs:schema>
--------------050500020905080703050309--