[osis-core] Valid Regex!
Patrick Durusau
osis-core@bibletechnologieswg.org
Tue, 21 May 2002 01:02:57 -0400
This is a multi-part message in MIME format.
--------------060608030701070107050803
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Guys,
Version with valid regex attached. (Dumb syntax error in the expression
but then aren't they all?)
Patrick
--
Patrick Durusau
Director of Research and Development
Society of Biblical Literature
pdurusau@emory.edu
--------------060608030701070107050803
Content-Type: text/xml;
name="OSISCore_1.test6.xsd"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="OSISCore_1.test6.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:(\p{Nd}*)\+(\p{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>
--------------060608030701070107050803--