Verify the XML of subtitle files.
[libdcp.git] / xsd / DCSubtitle.v1.mattsson.xsd
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
3   <xs:element name="DCSubtitle">
4     <xs:complexType>
5       <xs:sequence>
6         <xs:element name="SubtitleID" type="UUIDType"/>
7         <xs:element name="MovieTitle" type="xs:string"/>
8         <xs:element name="ReelNumber" type="xs:string"/>
9         <xs:element name="Language" type="xs:string"/>
10         <xs:element ref="LoadFont" minOccurs="0" maxOccurs="unbounded"/>
11         <xs:element ref="Font" minOccurs="0" maxOccurs="unbounded"/>
12         <xs:element ref="Subtitle" minOccurs="0" maxOccurs="unbounded"/>
13       </xs:sequence>
14       <xs:attribute name="Version" use="required">
15         <xs:simpleType>
16           <xs:restriction base="xs:string">
17             <xs:enumeration value="1.0"/>
18             <xs:enumeration value="1.1"/>
19           </xs:restriction>
20         </xs:simpleType>
21       </xs:attribute>
22     </xs:complexType>
23   </xs:element>
24    <xs:element name="LoadFont">
25      <xs:complexType>
26       <xs:simpleContent>
27         <xs:extension base="spaceType">
28           <xs:attribute name="Id" use="required" type="xs:string"/>
29           <xs:attribute name="URI" use="required" type="xs:anyURI"/>
30         </xs:extension>
31       </xs:simpleContent>
32      </xs:complexType>
33    </xs:element>
34   <xs:element name="Font">
35     <xs:complexType mixed="true">
36       <xs:choice minOccurs="0" maxOccurs="unbounded">
37         <xs:element ref="Font"/>
38         <xs:element ref="Subtitle"/>
39         <xs:element ref="Text"/>
40         <xs:element ref="Image"/>
41       </xs:choice>
42       <xs:attribute name="Id" type="xs:string"/>
43       <xs:attribute name="Color" type="fontColorType"/>
44       <xs:attribute name="Effect">
45         <xs:simpleType>
46           <xs:restriction base="xs:string">
47             <xs:enumeration value="none"/>
48             <xs:enumeration value="border"/>
49             <xs:enumeration value="shadow"/>
50           </xs:restriction>
51         </xs:simpleType>
52       </xs:attribute>
53       <xs:attribute name="EffectColor" type="fontColorType"/>
54       <xs:attribute name="Italic" type="yesNoType"/>
55       <xs:attribute name="Script">
56         <xs:simpleType>
57           <xs:restriction base="xs:string">
58             <xs:enumeration value="normal"/>
59             <xs:enumeration value="super"/>
60             <xs:enumeration value="sub"/>
61           </xs:restriction>
62         </xs:simpleType>
63       </xs:attribute>
64       <xs:attribute name="Size" type="xs:positiveInteger"/>
65       <xs:attribute name="AspectAdjust">
66         <xs:simpleType>
67           <xs:restriction base="xs:decimal">
68             <xs:minInclusive value="0.25"/>
69             <xs:maxInclusive value="4.0"/>
70           </xs:restriction>
71         </xs:simpleType>
72       </xs:attribute>
73       <xs:attribute name="Underlined" type="yesNoType"/>
74       <xs:attribute name="Weight">
75         <xs:simpleType>
76           <xs:restriction base="xs:string">
77             <xs:enumeration value="bold"/>
78             <xs:enumeration value="normal"/>
79           </xs:restriction>
80         </xs:simpleType>
81       </xs:attribute>
82       <xs:attribute name="Spacing" type="spacingType"/>
83     </xs:complexType>
84   </xs:element>
85   <xs:element name="Subtitle">
86     <xs:complexType>
87       <xs:choice minOccurs="0" maxOccurs="unbounded">
88         <xs:element ref="Font"/>
89         <xs:element ref="Text"/>
90         <xs:element ref="Image"/>
91       </xs:choice>
92       <xs:attribute name="SpotNumber" use="required" type="xs:string"/>
93       <xs:attribute name="TimeIn" use="required" type="timeType"/>
94       <xs:attribute name="TimeOut" use="required" type="timeType"/>
95       <xs:attribute name="FadeUpTime" type="fadeTimeType"/>
96       <xs:attribute name="FadeDownTime" type="fadeTimeType"/>
97     </xs:complexType>
98   </xs:element>
99   <xs:element name="Text">
100     <xs:complexType mixed="true">
101       <xs:choice minOccurs="0" maxOccurs="unbounded">
102         <xs:element ref="Font"/>
103         <xs:element minOccurs="0" maxOccurs="unbounded" ref="Ruby"/>
104         <xs:element minOccurs="0" maxOccurs="unbounded" ref="Space"/>
105         <xs:element minOccurs="0" maxOccurs="unbounded" ref="HGroup"/>
106         <xs:element minOccurs="0" maxOccurs="unbounded" ref="Rotate"/>
107       </xs:choice>
108       <xs:attribute name="Direction">
109         <xs:simpleType>
110           <xs:restriction base="xs:string">
111             <xs:enumeration value="horizontal"/>
112             <xs:enumeration value="vertical"/>
113           </xs:restriction>
114         </xs:simpleType>
115       </xs:attribute>
116       <xs:attribute name="HAlign" type="hAlignType"/>
117       <xs:attribute name="HPosition" type="positionType"/>
118       <xs:attribute name="VAlign" type="vAlignType" />
119       <xs:attribute name="VPosition" type="positionType"/>
120     </xs:complexType>
121   </xs:element>
122   <xs:element name="Ruby">
123     <xs:complexType>
124       <xs:sequence>
125         <xs:element ref="Rb"/>
126         <xs:element ref="Rt"/>
127       </xs:sequence>
128     </xs:complexType>
129   </xs:element>
130   <xs:element name="Rb" type="xs:string"/>
131   <xs:element name="Rt">
132     <xs:complexType>
133       <xs:simpleContent>
134         <xs:extension base="xs:string">
135           <xs:attribute name="Size" type="sizeType"/>
136           <xs:attribute name="Position">
137             <xs:simpleType>
138               <xs:restriction base="xs:string">
139                 <xs:enumeration value="before"/>
140                 <xs:enumeration value="after"/>
141               </xs:restriction>
142             </xs:simpleType>
143           </xs:attribute>
144           <xs:attribute name="Offset" type="spacingType"/>
145           <xs:attribute name="Spacing" type="spacingType"/>
146           <xs:attribute name="AspectAdjust">
147             <xs:simpleType>
148               <xs:restriction base="xs:decimal">
149                 <xs:minInclusive value="0.25"/>
150                 <xs:maxInclusive value="4.0"/>
151               </xs:restriction>
152             </xs:simpleType>
153           </xs:attribute>
154         </xs:extension>
155       </xs:simpleContent>
156     </xs:complexType>
157   </xs:element>
158   <xs:element name="Space">
159     <xs:complexType>
160       <xs:attribute name="Size" type="sizeType"/>
161     </xs:complexType>
162   </xs:element>
163   <xs:element name="HGroup" type="xs:string"/>
164   <xs:element name="Rotate">
165     <xs:complexType>
166       <xs:simpleContent>
167         <xs:extension base="xs:string">
168           <xs:attribute name="Direction">
169             <xs:simpleType>
170               <xs:restriction base="xs:string">
171                 <xs:enumeration value="none"/>
172                 <xs:enumeration value="right"/>
173                 <xs:enumeration value="left"/>
174               </xs:restriction>
175             </xs:simpleType>
176           </xs:attribute>
177         </xs:extension>
178       </xs:simpleContent>
179     </xs:complexType>
180   </xs:element>
181   <xs:element name="Image">
182     <xs:complexType>
183       <xs:simpleContent>
184         <xs:extension base="xs:anyURI">
185           <xs:attribute name="HAlign" type="hAlignType"/>
186           <xs:attribute name="HPosition" type="positionType"/>
187           <xs:attribute name="VAlign" type="vAlignType"/>
188           <xs:attribute name="VPosition" type="positionType"/>
189         </xs:extension>
190       </xs:simpleContent>
191     </xs:complexType>
192   </xs:element>
193   <xs:simpleType name="spaceType">
194     <xs:restriction base="xs:string">
195       <xs:pattern value="\s*"/>
196     </xs:restriction>
197   </xs:simpleType>
198   <xs:simpleType name="UUIDType">
199     <xs:restriction base="xs:string">
200       <xs:pattern value="\s*[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\s*"/>
201     </xs:restriction>
202   </xs:simpleType>
203   <xs:simpleType name="yesNoType">
204     <xs:restriction base="xs:string">
205       <xs:enumeration value="yes"/>
206       <xs:enumeration value="no"/>
207     </xs:restriction>
208   </xs:simpleType>
209   <xs:simpleType name="hAlignType">
210     <xs:restriction base="xs:string">
211       <xs:enumeration value="left"/>
212       <xs:enumeration value="right"/>
213       <xs:enumeration value="center"/>
214     </xs:restriction>
215   </xs:simpleType>
216   <xs:simpleType name="vAlignType">
217     <xs:restriction base="xs:string">
218       <xs:enumeration value="top"/>
219       <xs:enumeration value="bottom"/>
220       <xs:enumeration value="center"/>
221     </xs:restriction>
222   </xs:simpleType>
223   <xs:simpleType name="spacingType">
224     <xs:restriction base="xs:string">
225       <xs:pattern value="-?(\d+|\d+\.\d+)em"/>
226     </xs:restriction>
227   </xs:simpleType>
228   <xs:simpleType name="sizeType">
229     <xs:restriction base="xs:string">
230       <xs:pattern value="(\d+|\d+\.\d+)em"/>
231     </xs:restriction>
232   </xs:simpleType>
233   <xs:simpleType name="timeType">
234     <xs:restriction base="xs:string">
235       <xs:pattern value="\d\d:\d\d:\d\d(:(([0-1][0-9][0-9])|([2][0-4][0-9]))|(\.\d{1,3}))"/>
236     </xs:restriction>
237   </xs:simpleType>
238   <xs:simpleType name="fadeTimeType">
239     <xs:restriction base="xs:string">
240       <xs:pattern value="(\d\d:\d\d:\d\d(:|\.)(\d){1,3})|(\d){1,3}"/>
241     </xs:restriction>
242   </xs:simpleType>
243   <xs:simpleType name="fontColorType">
244     <xs:restriction base="xs:string">
245       <xs:pattern value="[0-9A-Fa-f]{8}"/>
246     </xs:restriction>
247   </xs:simpleType>
248   <xs:simpleType name="positionType">
249     <xs:restriction base="xs:decimal">
250       <xs:minInclusive value="-100"/>
251       <xs:maxInclusive value="100"/>
252     </xs:restriction>
253   </xs:simpleType>
254 </xs:schema>