summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-12-11 22:26:46 +0100
committerCarl Hetherington <cth@carlh.net>2023-02-18 00:35:01 +0100
commitb94821d7953dae7d9e58f703e66dca59e9086216 (patch)
tree4ba13b9498222f56b3f6819877497f68c17e88a1
parente053057472ec5ccba879b206c95b9997e77ff06d (diff)
Allow verification of 428-7-2014 subtitles.
-rw-r--r--src/verify.cc4
-rw-r--r--xsd/DCDMSubtitle-2014.xsd448
2 files changed, 451 insertions, 1 deletions
diff --git a/src/verify.cc b/src/verify.cc
index ed6c78d6..7cc6d357 100644
--- a/src/verify.cc
+++ b/src/verify.cc
@@ -242,7 +242,8 @@ public:
add("http://www.digicine.com/PROTO-ASDCP-AM-20040311.xsd", "PROTO-ASDCP-AM-20040311.xsd");
add("http://www.digicine.com/PROTO-ASDCP-CC-CPL-20070926#", "PROTO-ASDCP-CC-CPL-20070926.xsd");
add("interop-subs", "DCSubtitle.v1.mattsson.xsd");
- add("http://www.smpte-ra.org/schemas/428-7/2010/DCST.xsd", "SMPTE-428-7-2010-DCST.xsd");
+ add("http://www.smpte-ra.org/schemas/428-7/2010/DCST.xsd", "DCDMSubtitle-2010.xsd");
+ add("http://www.smpte-ra.org/schemas/428-7/2014/DCST.xsd", "DCDMSubtitle-2014.xsd");
add("http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata", "SMPTE-429-16.xsd");
add("http://www.dolby.com/schemas/2012/AD", "Dolby-2012-AD.xsd");
add("http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL", "SMPTE-429-10-2008.xsd");
@@ -321,6 +322,7 @@ validate_xml (T xml, boost::filesystem::path xsd_dtd_directory, vector<Verificat
schema.push_back("PROTO-ASDCP-AM-20040311.xsd");
schema.push_back("DCSubtitle.v1.mattsson.xsd");
schema.push_back("DCDMSubtitle-2010.xsd");
+ schema.push_back("DCDMSubtitle-2014.xsd");
schema.push_back("PROTO-ASDCP-CC-CPL-20070926.xsd");
schema.push_back("SMPTE-429-16.xsd");
schema.push_back("Dolby-2012-AD.xsd");
diff --git a/xsd/DCDMSubtitle-2014.xsd b/xsd/DCDMSubtitle-2014.xsd
new file mode 100644
index 00000000..a1be95f6
--- /dev/null
+++ b/xsd/DCDMSubtitle-2014.xsd
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema
+ targetNamespace="http://www.smpte-ra.org/schemas/428-7/2014/DCST"
+ xmlns:dcst="http://www.smpte-ra.org/schemas/428-7/2014/DCST"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <!-- SubtitleReel -->
+ <xs:element name="SubtitleReel" type="dcst:SubtitleReelType"/>
+ <xs:complexType name="SubtitleReelType">
+ <xs:sequence>
+ <xs:element name="Id" type="dcst:UUID"/>
+ <xs:element name="ContentTitleText" type="dcst:UserText"/>
+ <xs:element name="AnnotationText" type="dcst:UserText" minOccurs="0"/>
+ <xs:element name="IssueDate" type="xs:dateTime"/>
+ <xs:element name="ReelNumber" type="xs:positiveInteger" minOccurs="0"/>
+ <xs:element name="Language" type="xs:language" minOccurs="0" default="en"/>
+ <xs:element name="EditRate" type="dcst:RationalType"/>
+ <xs:element name="TimeCodeRate" type="xs:positiveInteger"/>
+ <xs:element name="StartTime" type="dcst:TimeCodeType" minOccurs="0"/>
+ <xs:element name="DisplayType" type="dcst:scopedTokenType" minOccurs="0"/>
+ <xs:element name="LoadFont" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:anyURI">
+ <xs:attribute name="ID" type="xs:string"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="SubtitleList">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element name="Subtitle" type="dcst:SubtitleType"/>
+ <xs:element name="Font">
+ <xs:complexType mixed="true">
+ <xs:complexContent mixed="true">
+ <xs:extension base="dcst:FontType">
+ <xs:sequence>
+ <xs:element name="Subtitle" type="dcst:SubtitleType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="IntrinsicPictureResolution" type="xs:string" use="optional"/>
+ </xs:complexType>
+
+ <!-- Subtitle -->
+ <xs:complexType name="SubtitleType">
+ <xs:sequence>
+ <xs:element name="LoadVariableZ" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="ID" type="xs:string" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element name="Text" type="dcst:TextType"/>
+ <xs:element name="Image" type="dcst:ImageType"/>
+ <xs:element name="Font">
+ <xs:complexType mixed="true">
+ <xs:complexContent mixed="true">
+ <xs:extension base="dcst:FontType">
+ <xs:sequence>
+ <xs:element name="Text" type="dcst:TextType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="SpotNumber" type="xs:string" use="optional"/>
+ <xs:attribute name="TimeIn" type="dcst:TimeCodeType" use="required"/>
+ <xs:attribute name="TimeOut" type="dcst:TimeCodeType" use="required"/>
+ <xs:attribute name="FadeUpTime" type="dcst:TimeCodeType" use="optional"/>
+ <xs:attribute name="FadeDownTime" type="dcst:TimeCodeType" use="optional"/>
+ </xs:complexType>
+
+ <!-- Image -->
+ <xs:complexType name="ImageType" mixed="false">
+ <xs:simpleContent>
+ <xs:extension base="xs:anyURI">
+ <xs:attribute name="Halign" use="optional" default="center">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Hposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Valign" use="optional" default="center">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="top"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Vposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Zposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="VariableZ" use="optional">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- Font -->
+ <xs:complexType name="FontType" mixed="true">
+ <xs:attribute name="Script" use="optional" default="normal">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="normal"/>
+ <xs:enumeration value="super"/>
+ <xs:enumeration value="sub"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Effect" use="optional" default="shadow">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="border"/>
+ <xs:enumeration value="shadow"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Italic" use="optional" default="no">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Underline" use="optional" default="no">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Weight" use="optional" default="normal">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="bold"/>
+ <xs:enumeration value="normal"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="ID" type="xs:string" use="optional"/>
+ <xs:attribute name="Color" use="optional" default="FFFFFFFF">
+ <xs:simpleType>
+ <xs:restriction base="xs:hexBinary">
+ <xs:length value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="EffectColor" use="optional" default="FF000000">
+ <xs:simpleType>
+ <xs:restriction base="xs:hexBinary">
+ <xs:length value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Size" use="optional" default="42">
+ <xs:simpleType>
+ <xs:restriction base="xs:positiveInteger"/>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="AspectAdjust" use="optional" default="1.0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="0.25"/>
+ <xs:maxInclusive value="4.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Spacing" use="optional" default="0.0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-1.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="EffectSize" use="optional" default="0.01">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="0.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Feather" use="optional" default="no">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+
+ <!-- Text -->
+ <xs:complexType name="TextType" mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="Font" type="dcst:FontType"/>
+ <xs:element name="Ruby" type="dcst:RubyType"/>
+ <xs:element name="Space" type="dcst:SpaceType"/>
+ <xs:element name="HGroup" type="xs:string"/>
+ <xs:element name="Rotate" type="dcst:RotateType"/>
+ </xs:choice>
+ <xs:attribute name="Halign" use="optional" default="center">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Hposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Valign" use="optional" default="center">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="top"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Vposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Direction" use="optional" default="ltr">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ <xs:enumeration value="ttb"/>
+ <xs:enumeration value="btt"/>
+ <xs:enumeration value="hor"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Zposition" use="optional" default="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-100"/>
+ <xs:maxInclusive value="100"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="VariableZ" use="optional">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+
+ <!-- Rational Type -->
+ <xs:simpleType name="RationalType">
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="xs:long"/>
+ </xs:simpleType>
+ <xs:length value="2"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- TimeCode Type -->
+ <xs:simpleType name="TimeCodeType">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-2][0-9]:[0-5][0-9]:[0-5][0-9]:[0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Ruby Type -->
+ <xs:complexType name="RubyType">
+ <xs:sequence>
+ <xs:element name="Rb">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="Rt">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="Size" use="optional" default="0.5">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minExclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Position" use="optional" default="before">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="before"/>
+ <xs:enumeration value="after"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Offset" use="optional" default="0.0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-1.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="Spacing" use="optional" default="0.0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-1.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="AspectAdjust" use="optional" default="1.0">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="0.25"/>
+ <xs:maxInclusive value="4.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <!-- Rotate Type -->
+ <xs:complexType name="RotateType">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="Direction" use="optional" default="none">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- Space Type -->
+ <xs:complexType name="SpaceType">
+ <xs:simpleContent>
+ <xs:extension base="dcst:EmptyElement">
+ <xs:attribute name="Size" use="optional" default="0.5">
+ <xs:simpleType>
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="-1.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- UUID Type -->
+ <xs:simpleType name="UUID">
+ <xs:restriction base="xs:anyURI">
+ <xs:pattern value="urn:uuid:[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}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- UserText Type -->
+ <xs:complexType name="UserText">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="language" type="xs:language" use="optional" default="en"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- Scoped Token Type -->
+ <xs:complexType name="scopedTokenType">
+ <xs:simpleContent>
+ <xs:extension base="xs:token">
+ <xs:attribute name="scope" type="xs:anyURI" use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- EmptyElement Type -->
+ <xs:simpleType name="EmptyElement">
+ <xs:restriction base="xs:string">
+ <xs:length value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>