Schema for DIDL XML Document Type
<!-- Schema for DIDL XML Document Type From: http://www.cselt.it/mpeg/public/mpeg-21_did_wd.zip Document: ISO/IEC JTC 1/SC 29/WG 11 N3971 (section 6) Status: unofficial, see the canonical version in the URL above -->
<?xml version="1.0"?> <!--============================================================--> <!--============================================================--> <!-- --> <!-- Schema for DIDL XML Document Type --> <!-- --> <!--============================================================--> <!--============================================================--> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" version="0.01"> <!--============================================================ Basic Principles that apply to all element types:
1) Any element with an attribute named 'ID' of type ID may have a REFERENCE child.
2) Any element with an attribute of type ID may have DESCRIPTOR children, and where they are allowed, they are always the first children.
3) Elements with an attribute of type ID *may not* have any attributes which are required. This is because attributes should be inheritable from a REFERENCE if they are not specified, which is not possible if they are required.
4) If an element has a REFERENCE child then only DESCRIPTOR (and possibly CONDITION) elements may precede it, and no elements may follow it.
============================================================--> <xsd:attributeGroup name="ID_ATTRS"> <xsd:attribute name="ID" type="xsd:ID" use="optional"/> </xsd:attributeGroup>
<!--============================================================
DIDL element may contain one of the top level (EXTERNAL_REFable) elements: CONTAINER or ITEM.
============================================================--> <xsd:element name="DIDL"> <xsd:complexType> <xsd:sequence> <xsd:element ref="DECLARATIONS" minOccurs="0"/> <xsd:choice> <xsd:element ref="CONTAINER"/> <xsd:element ref="ITEM"/> </xsd:choice> </xsd:sequence> </xsd:complexType> </xsd:element>
<!--============================================================
A DECLARATIONS element contains any number of ITEMs, DESCRIPTORs, COMPONENTs, and RESOURCEs, in any order. ============================================================--> <xsd:element name="DECLARATIONS"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="ITEM"/> <xsd:element ref="DESCRIPTOR"/> <xsd:element ref="COMPONENT"/> <xsd:element ref="RESOURCE"/> <xsd:element ref="ANNOTATION"/> </xsd:choice> </xsd:complexType> </xsd:element>
<!--============================================================
CONTAINER element may contain any number of CONTAINER elements followed by any number of ITEMS.
============================================================--> <xsd:element name="CONTAINER"> <xsd:complexType> <xsd:sequence> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:choice> <xsd:element ref="REFERENCE"/> <xsd:sequence> <xsd:element ref="CONTAINER" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="ITEM" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:choice> </xsd:sequence> <xsd:attributeGroup ref="ID_ATTRS"/> </xsd:complexType> </xsd:element>
<!--============================================================
ITEM element contains any number CHOICE elements, followed by at least one ITEM or COMPONENT element. An ITEM can be conditional.
============================================================--> <xsd:element name="ITEM"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:choice> <xsd:element ref="REFERENCE"/> <xsd:choice minOccurs=^Ô0^Ô maxOccurs="unbounded"> <xsd:element ref="CHOICE"/> <xsd:element ref="ITEM"/> <xsd:element ref="COMPONENT"/> </xsd:choice> </xsd:choice> <xsd:element ref="ANNOTATION" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="ID_ATTRS"/> </xsd:complexType> </xsd:element>
<!--============================================================
A DESCRIPTOR contains descriptive data about its parent element.
The DESCRIPTOR can be resource-based (comprised of a single COMPONENT), or text-based (comprised of a single STATEMENT). A DESCRIPTOR can be conditional. ============================================================--> <xsd:element name="DESCRIPTOR"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:choice> <xsd:element ref="REFERENCE"/> <xsd:element ref="COMPONENT"/> <xsd:element ref="STATEMENT"/> </xsd:choice> </xsd:sequence> <xsd:attributeGroup ref="ID_ATTRS"/> </xsd:complexType> </xsd:element>
<!--============================================================
A STATEMENT contains textual descriptive data within a DESCRIPTOR.
Attribs: TYPE - A string identifying the type of metadata
============================================================--> <xsd:element name="STATEMENT"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:any namespace="##any" processContents="skip" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="TYPE" type="xsd:uriReference"/> </xsd:complexType> </xsd:element>
<!--============================================================
COMPONENT element contains a RESOURCE element, followed by any number of ANCHOR elements. A COMPONENT can be conditional.
============================================================--> <xsd:element name="COMPONENT"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:choice> <xsd:element ref="REFERENCE"/> <xsd:element ref="RESOURCE" minOccurs="1" maxOccurs="unbounded"/> </xsd:choice> <xsd:element ref="ANCHOR" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attributeGroup ref="ID_ATTRS"/> </xsd:complexType> </xsd:element>
<!--============================================================
An ANCHOR element indicates a point of interest in the resource of the parent COMPONENT. An ANCHOR can be conditional. Attribs: PRECEDENCE - An unsigned integer value indicating the position that this start point should occupy relative to the other start points in this title. The highest precedence start file is the default entry point.
FRAGMENT - The fragment identifier that locates the start point position within the parent file. This string, when appended to the SRC attribute of the parent, plus a '#', becomes the full URI for the start point.
============================================================--> <xsd:element name="ANCHOR"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="PRECEDENCE" type="xsd:unsignedInt" use="default" value="0"/> <xsd:attribute name="FRAGMENT" type="xsd:uriReference"/> <xsd:attribute name=^ÔNAME^Ô type=^Ôxsd:ID^Ô/> </xsd:complexType> </xsd:element>
<!--============================================================
CONDITION element contains no children. It indicates a selection condition for the parent file. Multiple CONDITION tags indicate an 'OR' relationship, in that only one CONDITION needs to be satisfied for the parent element to be retrieved, included, etc. The individual IDs in the SELECT attribute of a CONDITION tag have an 'AND' relationship in that selection of all of the IDs referenced are required to satisfy that CONDITION.
Attribs: REQUIRE - Indicates the SELECTION(s) that must be affirmed for this CONDITION to be "satisfied".
EXCEPT - Indicates the SELECTION(s) that must be denied for this CONDITION to be "satisfied".
============================================================--> <xsd:element name="CONDITION"> <xsd:complexType> <xsd:attribute name="REQUIRE" type="xsd:IDREFS"/> <xsd:attribute name="EXCEPT" type="xsd:IDREFS"/> </xsd:complexType> </xsd:element>
<!--============================================================
CHOICE element contains one or more SELECTIONs. A CHOICE can be conditional. Attribs:
MIN_SELECTIONS - Minimum number of SELECTIONs that must be made. If not present, there is no minimum.
MAX_SELECTIONS - Maximum number of SELECTIONs that can be made. If not present, there is no maximum. DEFAULT - Indicates one or more default selections to use in the absence of info to make a more specific decision. Must conform to the requirements of the MIN_SELECTIONS and/or MAX_SELECTIONS attributes if present.
CHOICE_ID - Serves as a TARGET for ASSERTION elements. ============================================================--> <xsd:element name="CHOICE"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="SELECTION" maxOccurs="unbounded"/> <xsd:element ref=^ÔOVERRIDE^Ô minOccurs=^Ô0^Ô maxOccurs = ^Óunbounded^Ô/> </xsd:sequence> <xsd:attribute name="MIN_SELECTIONS" type="xsd:nonNegativeInteger"/> <xsd:attribute name="MAX_SELECTIONS" type="xsd:nonNegativeInteger"/> <xsd:attribute name="DEFAULT" type="xsd:IDREFS"/> <xsd:attribute name="CHOICE_ID" type="xsd:ID"/> </xsd:complexType> </xsd:element>
<!--============================================================
SELECTION element contains no children. A SELECTION can be conditional. Attrib: SELECT_ID - Uniquely identifies the SELECTION ============================================================-->
<xsd:element name="SELECTION"> <xsd:complexType> <xsd:sequence> <xsd:element ref="CONDITION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref=^ÔOVERRIDE^Ô minOccurs=^Ô0^Ô maxOccurs = ^Óunbounded^Ô/> </xsd:sequence> <xsd:attribute name="SELECT_ID" type="xsd:ID" use="required"/> </xsd:complexType> </xsd:element>
<!--============================================================
OVERRIDE element identifies a CHOICE or SELECTION that is superseded by the OVERRIDE^Òs parent.
Attribs: TARGET ^Ö An XPointer identifying the CHOICE or SELECTION being overridden
============================================================-->
<xsd:element name="OVERRIDE"> <xsd:complexType> <xsd:attribute name="TARGET" type="xsd:uriReference"/> </xsd:complexType> </xsd:element>
<!--============================================================
RESOURCE element contains or points to binary data. The contained data can be binary or any valid XML element.
Attribs: TYPE - An identifier of a recognized scheme indicating the type of the resource REF - A URI from which the resource data can be obtained LOCAL_PATH - Specifies the required location for a cached version
============================================================--> <xsd:element name="RESOURCE"> <xsd:complexType mixed="true"> <xsd:attribute name="TYPE" type="xsd:uriReference"/> <xsd:attribute name="REF" type="xsd:uriReference"/> <xsd:attribute name="LOCAL_PATH" type="xsd:uriReference"/> </xsd:complexType> <!-- "mixed" content model allows for embedded resources --> </xsd:element>
<!--============================================================ REFERENCE contains no child elements
Attrib: URI - Points to the referenced element ============================================================--> <xsd:element name="REFERENCE"> <xsd:complexType> <xsd:attribute name="URI" type="xsd:uriReference" use="required"/> </xsd:complexType> </xsd:element>
<!--============================================================
ANNOTATION contains any number of ASSERTIONs followed by any number of DESCRIPTORs followed by any number of ANCHORs Attrib: TARGET - Points to the element being annotated Restrictions: 1. The TARGET must reference an element within the parent ITEM, or can reference the parent ITEM itself. 2. The contents of an ANNOTATION must conform with the content model of the targeted element. For example, ANCHORs can be included only if the TARGET references a COMPONENT. ============================================================--> <xsd:element name="ANNOTATION"> <xsd:complexType> <xsd:choice> <xsd:element ref="REFERENCE"/> <xsd:sequence> <xsd:element ref="ASSERTION" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="DESCRIPTOR" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="ANCHOR" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:choice> <xsd:attribute name="TARGET" type="xsd:IDREF" use="required"/> <xsd:attributeGroup ref="ID_ATTRS"/> </xsd:complexType> </xsd:element>
<!--============================================================
ASSERTION contains no child elements Attribs: TRUE - The set of selection IDs which are asserted as true FALSE - The set of selection IDs which are asserted as false ============================================================--> <xsd:element name="ASSERTION"> <xsd:complexType> <xsd:attribute name="TARGET" type="xsd:IDREF" use="required"/> <xsd:attribute name="TRUE" type="xsd:IDREFS" use="optional"/> <xsd:attribute name="FALSE" type="xsd:IDREFS" use="optional"/> </xsd:complexType> </xsd:element> </xsd:schema>