Add namespaces and tweak CPL namespace so Xerces checks CompositionMetadataAsset.
authorCarl Hetherington <cth@carlh.net>
Thu, 3 Sep 2020 10:10:27 +0000 (12:10 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 20 Sep 2020 17:33:00 +0000 (19:33 +0200)
src/verify.cc
wscript
xsd/Dolby-2012-AD.xsd [new file with mode: 0644]
xsd/SMPTE-429-16.xsd [new file with mode: 0644]
xsd/SMPTE-429-7-2006-CPL.xsd

index 9a0895f6f8e79872c802aa3f552d8b0973baf0b3..ddf308cadb1c776257a20464df1b90f063a7f3f3 100644 (file)
@@ -206,10 +206,15 @@ public:
                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/429-16/2014/CPL-Metadata", "SMPTE-429-16.xsd");
+               add("http://www.dolby.com/schemas/2012/AD", "Dolby-2012-AD.xsd");
        }
 
        InputSource* resolveEntity(XMLCh const *, XMLCh const * system_id)
        {
+               if (!system_id) {
+                       return 0;
+               }
                string system_id_str = xml_ch_to_string (system_id);
                boost::filesystem::path p = _xsd_dtd_directory;
                if (_files.find(system_id_str) == _files.end()) {
@@ -278,6 +283,8 @@ validate_xml (T xml, boost::filesystem::path xsd_dtd_directory, list<Verificatio
                schema.push_back("DCSubtitle.v1.mattsson.xsd");
                schema.push_back("DCDMSubtitle-2010.xsd");
                schema.push_back("PROTO-ASDCP-CC-CPL-20070926.xsd");
+               schema.push_back("SMPTE-429-16.xsd");
+               schema.push_back("Dolby-2012-AD.xsd");
 
                /* XXX: I'm not especially clear what this is for, but it seems to be necessary */
                string locations;
diff --git a/wscript b/wscript
index f418652182118c73c5a8be7e53734d417899db91..25bee8df01fee86b092a13431be2d52f8ad75db2 100644 (file)
--- a/wscript
+++ b/wscript
@@ -248,7 +248,9 @@ def build(bld):
               'PROTO-ASDCP-CC-CPL-20070926.xsd',
               'Main-Stereo-Picture-CPL.xsd',
               'DCSubtitle.v1.mattsson.xsd',
-              'DCDMSubtitle-2010.xsd' ]:
+              'DCDMSubtitle-2010.xsd',
+              'Dolby-2012-AD.xsd',
+              'SMPTE-429-16.xsd' ]:
         bld.install_files('${PREFIX}/share/libdcp/xsd', os.path.join('xsd', i))
 
     bld.add_post_fun(post)
diff --git a/xsd/Dolby-2012-AD.xsd b/xsd/Dolby-2012-AD.xsd
new file mode 100644 (file)
index 0000000..f1c2219
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.dolby.com/schemas/2012/AD" xmlns:axd="http://www.dolby.com/schemas/2012/AD" xmlns:cpl="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://www.smpte-ra.org/schemas/429-7/2006/CPL"/>
+  <xs:element name="AuxData" type="axd:DataTrackFileAssetType"/>
+  <xs:complexType name="DataTrackFileAssetType">
+    <xs:complexContent>
+      <xs:extension base="cpl:TrackFileAssetType">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="DataType" type="xs:string"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:schema>
diff --git a/xsd/SMPTE-429-16.xsd b/xsd/SMPTE-429-16.xsd
new file mode 100644 (file)
index 0000000..0726f35
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata" xmlns:cpl="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:meta="http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://www.smpte-ra.org/schemas/429-7/2006/CPL"/>
+  <xs:element name="CompositionMetadataAsset" type="meta:CompositionMetadataAssetType"/>
+  <xs:complexType name="CompositionMetadataAssetType">
+    <xs:complexContent>
+      <xs:extension base="cpl:GenericAssetType">
+        <xs:sequence>
+          <xs:element name="FullContentTitleText" type="cpl:UserText"/>
+          <xs:element minOccurs="0" name="ReleaseTerritory">
+            <xs:complexType>
+              <xs:simpleContent>
+                <xs:extension base="xs:string">
+                  <xs:attribute default="http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata#scope/release-territory/UNM49" name="scope" type="xs:anyURI"/>
+                </xs:extension>
+              </xs:simpleContent>
+            </xs:complexType>
+          </xs:element>
+          <xs:element default="1" minOccurs="0" name="VersionNumber">
+            <xs:complexType>
+              <xs:simpleContent>
+                <xs:extension base="xs:nonNegativeInteger">
+                  <xs:attribute default="final" name="status" type="meta:StatusEnum"/>
+                </xs:extension>
+              </xs:simpleContent>
+            </xs:complexType>
+          </xs:element>
+          <xs:element minOccurs="0" name="Chain" type="xs:string"/>
+          <xs:element minOccurs="0" name="Distributor" type="xs:string"/>
+          <xs:element minOccurs="0" name="Facility" type="xs:string"/>
+          <xs:element minOccurs="0" name="AlternateContentVersionList">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element maxOccurs="unbounded" minOccurs="1" name="ContentVersion" type="cpl:ContentVersionType"/>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:element minOccurs="0" name="Luminance">
+            <xs:complexType>
+              <xs:simpleContent>
+                <xs:extension base="meta:PositiveDecimal">
+                  <xs:attribute name="units" type="meta:LuminanceUnitEnum" use="required"/>
+                </xs:extension>
+              </xs:simpleContent>
+            </xs:complexType>
+          </xs:element>
+          <xs:element minOccurs="1" name="MainSoundConfiguration" type="xs:string"/>
+          <xs:element minOccurs="1" name="MainSoundSampleRate" type="cpl:Rational"/>
+          <xs:element minOccurs="1" name="MainPictureStoredArea">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element name="Width" type="xs:positiveInteger"/>
+                <xs:element name="Height" type="xs:positiveInteger"/>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:element minOccurs="1" name="MainPictureActiveArea">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element name="Width" type="xs:positiveInteger"/>
+                <xs:element name="Height" type="xs:positiveInteger"/>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:element minOccurs="0" name="MainSubtitleLanguageList">
+            <xs:simpleType>
+              <xs:restriction base="meta:LanguageListType">
+                <xs:minLength value="1"/>
+              </xs:restriction>
+            </xs:simpleType>
+          </xs:element>
+          <xs:element minOccurs="0" name="ExtensionMetadataList">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element maxOccurs="unbounded" minOccurs="0" name="ExtensionMetadata" type="meta:ExtensionMetadataType"> </xs:element>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:simpleType name="StatusEnum">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="final"/>
+      <xs:enumeration value="temp"/>
+      <xs:enumeration value="pre"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="LuminanceUnitEnum">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="foot-lambert"/>
+      <xs:enumeration value="candela-per-square-metre"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="PositiveDecimal">
+    <xs:restriction base="xs:decimal">
+      <xs:minExclusive value="0"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="LanguageListType">
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list itemType="xs:language"/>
+      </xs:simpleType>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="ExtensionMetadataType">
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string"/>
+      <xs:element minOccurs="0" name="PropertyList">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="Property">
+              <xs:complexType>
+                <xs:sequence>
+                  <xs:element name="Name" type="xs:string"/>
+                  <xs:element name="Value" type="xs:string"/>
+                </xs:sequence>
+              </xs:complexType>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
+    </xs:sequence>
+    <xs:attribute name="scope" type="xs:anyURI" use="required"/>
+  </xs:complexType>
+</xs:schema>
index 0d2c48dfb310210fe1aea66bfaa4914c9ad5efaa..1b36f5c6a5c601a08cd87b3da22bdec4a3ea90c7 100644 (file)
@@ -96,7 +96,7 @@
             <xs:element name="MainPicture" type="cpl:PictureTrackFileAssetType" minOccurs="0"/>
             <xs:element name="MainSound" type="cpl:SoundTrackFileAssetType" minOccurs="0"/>
             <xs:element name="MainSubtitle" type="cpl:SubtitleTrackFileAssetType" minOccurs="0"/>
-            <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+            <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict" />
           </xs:sequence>
         </xs:complexType>
       </xs:element>