Skip to content

Instantly share code, notes, and snippets.

@jonbitgood
Created November 18, 2020 17:00
Show Gist options
  • Save jonbitgood/51e70fbbd536950432f64c5c2d8a4743 to your computer and use it in GitHub Desktop.
Save jonbitgood/51e70fbbd536950432f64c5c2d8a4743 to your computer and use it in GitHub Desktop.
USX 3.0
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xs:import namespace="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="../xsi.xsd"/>
<xs:group name="USX">
<xs:choice>
<xs:group ref="Scripture"/>
<xs:group ref="Peripheral"/>
</xs:choice>
</xs:group>
<xs:group name="Scripture">
<xs:sequence>
<xs:element name="usx">
<xs:complexType>
<xs:sequence>
<xs:group ref="BookIdentification"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookHeaders"/>
<xs:group maxOccurs="unbounded" ref="BookTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroduction"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroductionEndTitles"/>
<xs:group minOccurs="0" ref="BookChapterLabel"/>
<xs:group ref="Chapter"/>
<xs:group maxOccurs="unbounded" ref="ChapterContent"/>
</xs:sequence>
<xs:attribute name="version" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="3"/>
<xs:pattern value="\d+\.\d+(\.\d+)?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref="xsi:noNamespaceSchemaLocation"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="Peripheral">
<xs:sequence>
<xs:element name="usx">
<xs:complexType>
<xs:choice>
<xs:group ref="PeripheralBook"/>
<xs:group ref="PeripheralDividedBook"/>
</xs:choice>
<xs:attribute name="version" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="3"/>
<xs:pattern value="\d+\.\d+(\.\d+)?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref="xsi:noNamespaceSchemaLocation"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="PeripheralBook">
<xs:sequence>
<xs:group ref="PeripheralBookIdentification"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookHeaders"/>
<xs:group maxOccurs="unbounded" ref="BookTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroduction"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroductionEndTitles"/>
<xs:group maxOccurs="unbounded" ref="PeripheralContent"/>
</xs:sequence>
</xs:group>
<xs:group name="PeripheralDividedBook">
<xs:sequence>
<xs:group ref="PeripheralDividedBookIdentification"/>
<xs:choice>
<xs:element ref="periph"/>
<xs:group ref="PeripheralOther"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:group name="BookIdentification">
<xs:sequence>
<xs:element name="book">
<xs:complexType mixed="true">
<xs:attribute name="code" use="required" type="BookIdentification.book.code.enum"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="id"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="BookIdentification.book.code.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="GEN"/>
<xs:enumeration value="EXO"/>
<xs:enumeration value="LEV"/>
<xs:enumeration value="NUM"/>
<xs:enumeration value="DEU"/>
<xs:enumeration value="JOS"/>
<xs:enumeration value="JDG"/>
<xs:enumeration value="RUT"/>
<xs:enumeration value="1SA"/>
<xs:enumeration value="2SA"/>
<xs:enumeration value="1KI"/>
<xs:enumeration value="2KI"/>
<xs:enumeration value="1CH"/>
<xs:enumeration value="2CH"/>
<xs:enumeration value="EZR"/>
<xs:enumeration value="NEH"/>
<xs:enumeration value="EST"/>
<xs:enumeration value="JOB"/>
<xs:enumeration value="PSA"/>
<xs:enumeration value="PRO"/>
<xs:enumeration value="ECC"/>
<xs:enumeration value="SNG"/>
<xs:enumeration value="ISA"/>
<xs:enumeration value="JER"/>
<xs:enumeration value="LAM"/>
<xs:enumeration value="EZK"/>
<xs:enumeration value="DAN"/>
<xs:enumeration value="HOS"/>
<xs:enumeration value="JOL"/>
<xs:enumeration value="AMO"/>
<xs:enumeration value="OBA"/>
<xs:enumeration value="JON"/>
<xs:enumeration value="MIC"/>
<xs:enumeration value="NAM"/>
<xs:enumeration value="HAB"/>
<xs:enumeration value="ZEP"/>
<xs:enumeration value="HAG"/>
<xs:enumeration value="ZEC"/>
<xs:enumeration value="MAL"/>
<xs:enumeration value="MAT"/>
<xs:enumeration value="MRK"/>
<xs:enumeration value="LUK"/>
<xs:enumeration value="JHN"/>
<xs:enumeration value="ACT"/>
<xs:enumeration value="ROM"/>
<xs:enumeration value="1CO"/>
<xs:enumeration value="2CO"/>
<xs:enumeration value="GAL"/>
<xs:enumeration value="EPH"/>
<xs:enumeration value="PHP"/>
<xs:enumeration value="COL"/>
<xs:enumeration value="1TH"/>
<xs:enumeration value="2TH"/>
<xs:enumeration value="1TI"/>
<xs:enumeration value="2TI"/>
<xs:enumeration value="TIT"/>
<xs:enumeration value="PHM"/>
<xs:enumeration value="HEB"/>
<xs:enumeration value="JAS"/>
<xs:enumeration value="1PE"/>
<xs:enumeration value="2PE"/>
<xs:enumeration value="1JN"/>
<xs:enumeration value="2JN"/>
<xs:enumeration value="3JN"/>
<xs:enumeration value="JUD"/>
<xs:enumeration value="REV"/>
<xs:enumeration value="TOB"/>
<xs:enumeration value="JDT"/>
<xs:enumeration value="ESG"/>
<xs:enumeration value="WIS"/>
<xs:enumeration value="SIR"/>
<xs:enumeration value="BAR"/>
<xs:enumeration value="LJE"/>
<xs:enumeration value="S3Y"/>
<xs:enumeration value="SUS"/>
<xs:enumeration value="BEL"/>
<xs:enumeration value="1MA"/>
<xs:enumeration value="2MA"/>
<xs:enumeration value="3MA"/>
<xs:enumeration value="4MA"/>
<xs:enumeration value="1ES"/>
<xs:enumeration value="2ES"/>
<xs:enumeration value="MAN"/>
<xs:enumeration value="PS2"/>
<xs:enumeration value="ODA"/>
<xs:enumeration value="PSS"/>
<xs:enumeration value="EZA"/>
<xs:enumeration value="5EZ"/>
<xs:enumeration value="6EZ"/>
<xs:enumeration value="DAG"/>
<xs:enumeration value="PS3"/>
<xs:enumeration value="2BA"/>
<xs:enumeration value="LBA"/>
<xs:enumeration value="JUB"/>
<xs:enumeration value="ENO"/>
<xs:enumeration value="1MQ"/>
<xs:enumeration value="2MQ"/>
<xs:enumeration value="3MQ"/>
<xs:enumeration value="REP"/>
<xs:enumeration value="4BA"/>
<xs:enumeration value="LAO"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="PeripheralBookIdentification">
<xs:sequence>
<xs:element name="book">
<xs:complexType mixed="true">
<xs:attribute name="code" use="required" type="PeripheralBookIdentification.book.code.enum"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="id"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="PeripheralBookIdentification.book.code.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="CNC"/>
<xs:enumeration value="GLO"/>
<xs:enumeration value="TDX"/>
<xs:enumeration value="NDX"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="PeripheralDividedBookIdentification">
<xs:sequence>
<xs:element name="book">
<xs:complexType mixed="true">
<xs:attribute name="code" use="required" type="PeripheralDividedBookIdentification.book.code.enum"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="id"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="PeripheralDividedBookIdentification.book.code.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="XXA"/>
<xs:enumeration value="XXB"/>
<xs:enumeration value="XXC"/>
<xs:enumeration value="XXD"/>
<xs:enumeration value="XXE"/>
<xs:enumeration value="XXF"/>
<xs:enumeration value="XXG"/>
<xs:enumeration value="FRT"/>
<xs:enumeration value="BAK"/>
<xs:enumeration value="OTH"/>
<xs:enumeration value="INT"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="periph">
<xs:complexType>
<xs:sequence>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookHeaders"/>
<xs:group maxOccurs="unbounded" ref="BookTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroduction"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroductionEndTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="PeripheralContent"/>
</xs:sequence>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:union memberTypes="Peripheral.FRT.periph.id.enum Peripheral.INT.periph.id.enum Peripheral.BAK.periph.id.enum Peripheral.OTH.periph.id.enum">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="x\-[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="alt"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="Peripheral.FRT.periph.id.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="title"/>
<xs:enumeration value="halftitle"/>
<xs:enumeration value="promo"/>
<xs:enumeration value="imprimatur"/>
<xs:enumeration value="pubdata"/>
<xs:enumeration value="foreword"/>
<xs:enumeration value="preface"/>
<xs:enumeration value="contents"/>
<xs:enumeration value="alphacontents"/>
<xs:enumeration value="abbreviations"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Peripheral.INT.periph.id.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="intbible"/>
<xs:enumeration value="intot"/>
<xs:enumeration value="intpent"/>
<xs:enumeration value="inthistory"/>
<xs:enumeration value="intpoetry"/>
<xs:enumeration value="intprophesy"/>
<xs:enumeration value="intdc"/>
<xs:enumeration value="intnt"/>
<xs:enumeration value="intgospels"/>
<xs:enumeration value="intepistles"/>
<xs:enumeration value="intletters"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Peripheral.BAK.periph.id.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="chron"/>
<xs:enumeration value="measures"/>
<xs:enumeration value="maps"/>
<xs:enumeration value="lxxquotes"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Peripheral.OTH.periph.id.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="cover"/>
<xs:enumeration value="spine"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="PeripheralOther">
<xs:sequence>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookHeaders"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroduction"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="BookIntroductionEndTitles"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="PeripheralContent"/>
</xs:sequence>
</xs:group>
<xs:group name="BookHeaders">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:attribute name="style" use="required" type="BookHeaders.para.style.enum"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="BookHeaders.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="ide"/>
<xs:enumeration value="h"/>
<xs:enumeration value="h1"/>
<xs:enumeration value="h2"/>
<xs:enumeration value="h3"/>
<xs:enumeration value="toc1"/>
<xs:enumeration value="toc2"/>
<xs:enumeration value="toc3"/>
<xs:enumeration value="toca1"/>
<xs:enumeration value="toca2"/>
<xs:enumeration value="toca3"/>
<xs:enumeration value="rem"/>
<xs:enumeration value="usfm"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="BookTitles">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="BookTitles.para.style.enum"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="BookTitles.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="mt"/>
<xs:enumeration value="mt1"/>
<xs:enumeration value="mt2"/>
<xs:enumeration value="mt3"/>
<xs:enumeration value="mt4"/>
<xs:enumeration value="imt"/>
<xs:enumeration value="imt1"/>
<xs:enumeration value="imt2"/>
<xs:enumeration value="rem"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="BookIntroduction">
<xs:choice>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:group ref="IntroChar"/>
<xs:group ref="Milestone"/>
<xs:element ref="figure"/>
</xs:choice>
<xs:attribute name="style" use="required" type="BookIntroduction.para.style.enum"/>
</xs:complexType>
</xs:element>
<xs:element ref="table"/>
</xs:choice>
</xs:group>
<xs:simpleType name="BookIntroduction.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="imt"/>
<xs:enumeration value="imt1"/>
<xs:enumeration value="imt2"/>
<xs:enumeration value="imt3"/>
<xs:enumeration value="imt4"/>
<xs:enumeration value="ib"/>
<xs:enumeration value="ie"/>
<xs:enumeration value="ili"/>
<xs:enumeration value="ili1"/>
<xs:enumeration value="ili2"/>
<xs:enumeration value="im"/>
<xs:enumeration value="imi"/>
<xs:enumeration value="imq"/>
<xs:enumeration value="io"/>
<xs:enumeration value="io1"/>
<xs:enumeration value="io2"/>
<xs:enumeration value="io3"/>
<xs:enumeration value="io4"/>
<xs:enumeration value="iot"/>
<xs:enumeration value="ip"/>
<xs:enumeration value="ipi"/>
<xs:enumeration value="ipq"/>
<xs:enumeration value="ipr"/>
<xs:enumeration value="iq"/>
<xs:enumeration value="iq1"/>
<xs:enumeration value="iq2"/>
<xs:enumeration value="iq3"/>
<xs:enumeration value="is"/>
<xs:enumeration value="is1"/>
<xs:enumeration value="is2"/>
<xs:enumeration value="imte"/>
<xs:enumeration value="imte1"/>
<xs:enumeration value="imte2"/>
<xs:enumeration value="iex"/>
<xs:enumeration value="rem"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="BookIntroductionEndTitles">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="BookIntroductionEndTitles.para.style.enum"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="BookIntroductionEndTitles.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="mt"/>
<xs:enumeration value="mt1"/>
<xs:enumeration value="mt2"/>
<xs:enumeration value="mt3"/>
<xs:enumeration value="mt4"/>
<xs:enumeration value="imt"/>
<xs:enumeration value="imt1"/>
<xs:enumeration value="imt2"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="ChapterContent">
<xs:choice>
<xs:group ref="Chapter"/>
<xs:group ref="Para"/>
<xs:group ref="List"/>
<xs:element ref="table"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:element ref="sidebar"/>
</xs:choice>
</xs:group>
<xs:group name="PeripheralContent">
<xs:choice>
<xs:group ref="Chapter"/>
<xs:group ref="Para"/>
<xs:group ref="List"/>
<xs:element ref="table"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:element ref="sidebar"/>
</xs:choice>
</xs:group>
<xs:group name="Para">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:element ref="figure"/>
<xs:group ref="Verse"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="Para.para.style.enum"/>
<xs:attribute name="vid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z1-4]{3} ?[a-z0-9\-,:]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="Para.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="restore"/>
<xs:enumeration value="cls"/>
<xs:enumeration value="iex"/>
<xs:enumeration value="ip"/>
<xs:enumeration value="lit"/>
<xs:enumeration value="m"/>
<xs:enumeration value="mi"/>
<xs:enumeration value="nb"/>
<xs:enumeration value="p"/>
<xs:enumeration value="pb"/>
<xs:enumeration value="pc"/>
<xs:enumeration value="pi"/>
<xs:enumeration value="pi1"/>
<xs:enumeration value="pi2"/>
<xs:enumeration value="pi3"/>
<xs:enumeration value="po"/>
<xs:enumeration value="pr"/>
<xs:enumeration value="pmo"/>
<xs:enumeration value="pm"/>
<xs:enumeration value="pmc"/>
<xs:enumeration value="pmr"/>
<xs:enumeration value="q"/>
<xs:enumeration value="q1"/>
<xs:enumeration value="q2"/>
<xs:enumeration value="q3"/>
<xs:enumeration value="q4"/>
<xs:enumeration value="qa"/>
<xs:enumeration value="qc"/>
<xs:enumeration value="qr"/>
<xs:enumeration value="qm"/>
<xs:enumeration value="qm1"/>
<xs:enumeration value="qm2"/>
<xs:enumeration value="qm3"/>
<xs:enumeration value="qd"/>
<xs:enumeration value="b"/>
<xs:enumeration value="d"/>
<xs:enumeration value="ms"/>
<xs:enumeration value="ms1"/>
<xs:enumeration value="ms2"/>
<xs:enumeration value="ms3"/>
<xs:enumeration value="mr"/>
<xs:enumeration value="r"/>
<xs:enumeration value="s"/>
<xs:enumeration value="s1"/>
<xs:enumeration value="s2"/>
<xs:enumeration value="s3"/>
<xs:enumeration value="s4"/>
<xs:enumeration value="sr"/>
<xs:enumeration value="sp"/>
<xs:enumeration value="sd"/>
<xs:enumeration value="sd1"/>
<xs:enumeration value="sd2"/>
<xs:enumeration value="sd3"/>
<xs:enumeration value="sd4"/>
<xs:enumeration value="ts"/>
<xs:enumeration value="lh"/>
<xs:enumeration value="li"/>
<xs:enumeration value="li1"/>
<xs:enumeration value="li2"/>
<xs:enumeration value="li3"/>
<xs:enumeration value="li4"/>
<xs:enumeration value="lf"/>
<xs:enumeration value="lim"/>
<xs:enumeration value="lim1"/>
<xs:enumeration value="lim2"/>
<xs:enumeration value="lim3"/>
<xs:enumeration value="lim4"/>
<xs:enumeration value="cp"/>
<xs:enumeration value="cl"/>
<xs:enumeration value="cd"/>
<xs:enumeration value="mte"/>
<xs:enumeration value="mte1"/>
<xs:enumeration value="mte2"/>
<xs:enumeration value="p"/>
<xs:enumeration value="p1"/>
<xs:enumeration value="p2"/>
<xs:enumeration value="k1"/>
<xs:enumeration value="k2"/>
<xs:enumeration value="rem"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="List">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:group ref="ListChar"/>
<xs:group ref="Milestone"/>
<xs:element ref="figure"/>
<xs:group ref="Verse"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="List.para.style.enum"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="List.para.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="lh"/>
<xs:enumeration value="li"/>
<xs:enumeration value="li1"/>
<xs:enumeration value="li2"/>
<xs:enumeration value="li3"/>
<xs:enumeration value="li4"/>
<xs:enumeration value="lf"/>
<xs:enumeration value="lim"/>
<xs:enumeration value="lim1"/>
<xs:enumeration value="lim2"/>
<xs:enumeration value="lim3"/>
<xs:enumeration value="lim4"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="row"/>
</xs:sequence>
<xs:attribute name="vid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z1-4]{3} ?[a-z0-9\-,:]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="row">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:group ref="Verse"/>
<xs:element ref="cell"/>
</xs:choice>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="tr"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="cell">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:element ref="figure"/>
<xs:group ref="Verse"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="cell.style.enum"/>
<xs:attribute name="align" use="required" type="cell.align.enum"/>
<xs:attribute name="colspan" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="cell.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="th"/>
<xs:enumeration value="tc"/>
<xs:enumeration value="thr"/>
<xs:enumeration value="tcr"/>
<xs:enumeration value="thc"/>
<xs:enumeration value="tcc"/>
<xs:enumeration value="th1"/>
<xs:enumeration value="tc1"/>
<xs:enumeration value="thr1"/>
<xs:enumeration value="tcr1"/>
<xs:enumeration value="th2"/>
<xs:enumeration value="tc2"/>
<xs:enumeration value="thr2"/>
<xs:enumeration value="tcr2"/>
<xs:enumeration value="th3"/>
<xs:enumeration value="tc3"/>
<xs:enumeration value="thr3"/>
<xs:enumeration value="tcr3"/>
<xs:enumeration value="th4"/>
<xs:enumeration value="tc4"/>
<xs:enumeration value="thr4"/>
<xs:enumeration value="tcr4"/>
<xs:enumeration value="th5"/>
<xs:enumeration value="tc5"/>
<xs:enumeration value="thr5"/>
<xs:enumeration value="tcr5"/>
<xs:enumeration value="rem"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cell.align.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="start"/>
<xs:enumeration value="center"/>
<xs:enumeration value="end"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="IntroChar">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Char"/>
<xs:group ref="IntroChar"/>
<xs:group ref="Milestone"/>
<xs:group ref="Footnote"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="IntroChar.char.style.enum"/>
<xs:attribute name="closed" type="xs:boolean"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="IntroChar.char.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="ior"/>
<xs:enumeration value="iqt"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="Char">
<xs:choice>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:group ref="Footnote"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="Char.char.style.enum"/>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:group ref="CharWithAttrib.enum"/>
</xs:choice>
</xs:group>
<xs:simpleType name="Char.char.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="va"/>
<xs:enumeration value="vp"/>
<xs:enumeration value="ca"/>
<xs:enumeration value="qac"/>
<xs:enumeration value="qs"/>
<xs:enumeration value="add"/>
<xs:enumeration value="addpn"/>
<xs:enumeration value="bk"/>
<xs:enumeration value="dc"/>
<xs:enumeration value="efm"/>
<xs:enumeration value="fm"/>
<xs:enumeration value="k"/>
<xs:enumeration value="nd"/>
<xs:enumeration value="ndx"/>
<xs:enumeration value="ord"/>
<xs:enumeration value="pn"/>
<xs:enumeration value="png"/>
<xs:enumeration value="pro"/>
<xs:enumeration value="qt"/>
<xs:enumeration value="rq"/>
<xs:enumeration value="sig"/>
<xs:enumeration value="sls"/>
<xs:enumeration value="tl"/>
<xs:enumeration value="wg"/>
<xs:enumeration value="wh"/>
<xs:enumeration value="wa"/>
<xs:enumeration value="wj"/>
<xs:enumeration value="xt"/>
<xs:enumeration value="jmp"/>
<xs:enumeration value="no"/>
<xs:enumeration value="it"/>
<xs:enumeration value="bd"/>
<xs:enumeration value="bdit"/>
<xs:enumeration value="em"/>
<xs:enumeration value="sc"/>
<xs:enumeration value="sup"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="ListChar">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:group ref="Footnote"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required" type="ListChar.char.style.enum"/>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="ListChar.char.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="litl"/>
<xs:enumeration value="lik"/>
<xs:enumeration value="liv"/>
<xs:enumeration value="liv1"/>
<xs:enumeration value="liv2"/>
<xs:enumeration value="liv3"/>
<xs:enumeration value="liv4"/>
<xs:enumeration value="liv5"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="CharWithAttrib.enum">
<xs:choice>
<xs:group ref="CharWithAttrib.char.style.w"/>
<xs:group ref="CharWithAttrib.char.style.rb"/>
</xs:choice>
</xs:group>
<xs:group name="CharWithAttrib.char.style.w">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:group ref="Footnote"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="w"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
<xs:attribute name="lemma">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="strong">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[HG]\d{4,5}(:[a-z])?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="srcloc">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]{3,5}\d?:\d+\.\d+\.\d+\.\d+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="CharWithAttrib.char.style.rb">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ref"/>
<xs:group ref="Char"/>
<xs:group ref="Milestone"/>
<xs:group ref="Footnote"/>
<xs:element ref="optbreak"/>
</xs:choice>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="rb"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
<xs:attribute name="gloss">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="char.link">
<xs:attribute name="link-href">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(.*///?(.*/?)+)|((prj:[A-Za-z\-0-9]{3,8} )?[A-Z1-4]{3}
\d+:\d+(\-\d+)?)|(#[^\s]+)
"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="link-title" type="xs:string"/>
<xs:attribute name="link-id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<!-- Unique identifier for this location in the text -->
<xs:attributeGroup name="char.closed">
<xs:attribute name="closed" use="required" type="xs:boolean"/>
</xs:attributeGroup>
<!-- Present to allow roundtripping to USFM, not needed for publishing -->
<xs:group name="Milestone">
<xs:choice>
<xs:element name="ms">
<xs:complexType>
<xs:attribute name="style" use="required" type="Milestone.ms.style.enum"/>
<xs:attribute name="sid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="eid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:group ref="MilestoneWithAttrib.enum"/>
</xs:choice>
</xs:group>
<xs:simpleType name="Milestone.ms.style.enum">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="ts?(\-[se])?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[Zz].+"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:group name="MilestoneWithAttrib.enum">
<xs:sequence>
<xs:group ref="MilestoneWithAttrib.ms.style.qt"/>
</xs:sequence>
</xs:group>
<xs:group name="MilestoneWithAttrib.ms.style.qt">
<xs:sequence>
<xs:element name="ms">
<xs:complexType>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="qt[1-5]?(\-[se])?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="sid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="eid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_\-\.:]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="who">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<!-- E.g. <ms style="qt1-s" sid="GEN.1.9.1" who="God"> -->
<xs:group name="Chapter">
<xs:choice>
<xs:group ref="ChapterStart"/>
<xs:group ref="ChapterEnd"/>
</xs:choice>
</xs:group>
<xs:group name="ChapterStart">
<xs:sequence>
<xs:element name="chapter">
<xs:complexType>
<xs:attribute name="number" use="required" type="xs:integer"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="c"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="sid" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:pattern value="[A-Z1-4]{3} ?[0-9]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="altnumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:pattern value="[0-9]+\w?(‏?[\-,][0-9]+\w?)*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="pubnumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<!--
E.g. <chapter number="1" style="c" altnumber="2" pubnumber="A" />
This schema will not support a chapter:verse string within altnumber
-->
<xs:group name="ChapterEnd">
<xs:sequence>
<xs:element name="chapter">
<xs:complexType>
<xs:attribute name="eid" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:pattern value="[A-Z1-4]{3} ?[0-9]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="BookChapterLabel">
<xs:sequence>
<xs:element name="para">
<xs:complexType mixed="true">
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="cl"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="Verse">
<xs:choice>
<xs:group ref="VerseStart"/>
<xs:group ref="VerseEnd"/>
</xs:choice>
</xs:group>
<xs:group name="VerseStart">
<xs:sequence>
<xs:element name="verse">
<xs:complexType>
<xs:attribute name="number" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:pattern value="[0-9]+\w?(‏?[\-,][0-9]+\w?)*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="v"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="altnumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:pattern value="[0-9]+\w?(‏?[\-,:][0-9]+\w?)*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="pubnumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="sid" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z1-4]{3} ?[a-z0-9\-,:]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<!-- E.g. <verse number="1" style="v" altnumber="2" pubnumber="B" sid="GEN 1:22" /> -->
<xs:group name="VerseEnd">
<xs:sequence>
<xs:element name="verse">
<xs:complexType>
<xs:attribute name="eid" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z1-4]{3} ?[a-z0-9\-,:]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="Footnote">
<xs:sequence>
<xs:element name="note">
<xs:complexType mixed="true">
<xs:group minOccurs="0" maxOccurs="unbounded" ref="FootnoteChar"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="f"/>
<xs:enumeration value="fe"/>
<xs:enumeration value="ef"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="caller" use="required"/>
<xs:attribute name="category"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="FootnoteChar">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="Char"/>
<xs:group ref="FootnoteChar"/>
<xs:group ref="FootnoteVerse"/>
<xs:element ref="ref"/>
</xs:choice>
<xs:attribute name="style" use="required" type="FootnoteChar.char.style.enum"/>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="FootnoteChar.char.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="fr"/>
<xs:enumeration value="cat"/>
<xs:enumeration value="ft"/>
<xs:enumeration value="fk"/>
<xs:enumeration value="fq"/>
<xs:enumeration value="fqa"/>
<xs:enumeration value="fl"/>
<xs:enumeration value="fw"/>
<xs:enumeration value="fp"/>
<xs:enumeration value="fv"/>
<xs:enumeration value="fdc"/>
<xs:enumeration value="xt"/>
<xs:enumeration value="it"/>
<xs:enumeration value="bd"/>
<xs:enumeration value="bdit"/>
<xs:enumeration value="em"/>
<xs:enumeration value="sc"/>
</xs:restriction>
</xs:simpleType>
<xs:group name="FootnoteVerse">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="fv"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="CrossReference">
<xs:sequence>
<xs:element name="note">
<xs:complexType mixed="true">
<xs:group minOccurs="0" maxOccurs="unbounded" ref="CrossReferenceChar"/>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="x"/>
<xs:enumeration value="ex"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="caller" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="CrossReferenceChar">
<xs:sequence>
<xs:element name="char">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="Char"/>
<xs:group ref="CrossReferenceChar"/>
<xs:element ref="ref"/>
</xs:choice>
<xs:attribute name="style" use="required" type="CrossReferenceChar.char.style.enum"/>
<xs:attributeGroup ref="char.link"/>
<xs:attribute name="closed" type="xs:boolean"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:simpleType name="CrossReferenceChar.char.style.enum">
<xs:restriction base="xs:token">
<xs:enumeration value="xo"/>
<xs:enumeration value="xop"/>
<xs:enumeration value="xt"/>
<xs:enumeration value="xta"/>
<xs:enumeration value="xk"/>
<xs:enumeration value="xq"/>
<xs:enumeration value="xot"/>
<xs:enumeration value="xnt"/>
<xs:enumeration value="xdc"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="sidebar">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:group ref="Para"/>
<xs:group ref="List"/>
<xs:element ref="table"/>
<xs:group ref="Footnote"/>
<xs:group ref="CrossReference"/>
</xs:choice>
<xs:attribute name="style" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="esb"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="category"/>
</xs:complexType>
</xs:element>
<xs:element name="figure">
<xs:complexType mixed="true">
<xs:attribute name="style" use="required"/>
<xs:attribute name="alt"/>
<xs:attribute name="file" use="required"/>
<xs:attribute name="size" use="required"/>
<xs:attribute name="loc"/>
<xs:attribute name="copy"/>
<xs:attribute name="ref" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="ref">
<xs:complexType mixed="true">
<xs:attribute name="loc" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z1-4]{3} ?[a-z0-9\-,:]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="optbreak">
<xs:complexType/>
</xs:element>
</xs:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment