[gupnp-av/wip/didl-lite-fragments: 14/20] Add DIDL-Lite related schema files.



commit 35567936d3e89922d773f22f42a51c4d8359bb09
Author: Krzesimir Nowak <krnowak openismus com>
Date:   Thu Oct 25 11:32:13 2012 +0200

    Add DIDL-Lite related schema files.
    
    These will be used by fragments code. They are put here to avoid
    downloading them from network.

 Makefile.am               |    2 +-
 configure.ac              |    1 +
 data/Makefile.am          |    1 +
 data/av.xsd               |  773 +++++++++++++++++++++++++++++++++++++++++
 data/didl-lite-v2.xsd     |  424 +++++++++++++++++++++++
 data/simpledc20021212.xsd |   71 ++++
 data/upnp.xsd             |  841 +++++++++++++++++++++++++++++++++++++++++++++
 data/xml.xsd              |  146 ++++++++
 8 files changed, 2258 insertions(+), 1 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 0ad099b..eff91c3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = libgupnp-av tests doc vala
+SUBDIRS = libgupnp-av tests doc vala data
 
 pkgconfig_DATA= gupnp-av-1.0.pc
 pkgconfigdir = $(libdir)/pkgconfig
diff --git a/configure.ac b/configure.ac
index 173e334..b5e8987 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,6 +59,7 @@ tests/Makefile
 tests/gtest/Makefile
 doc/Makefile
 doc/version.xml
+data/Makefile
 vala/Makefile
 gupnp-av-1.0.pc
 gupnp-av-1.0-uninstalled.pc
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..b224106
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1 @@
+dist_pkgdata_DATA = didl-lite-v2.xsd upnp.xsd av.xsd xml.xsd simpledc20021212.xsd
diff --git a/data/av.xsd b/data/av.xsd
new file mode 100644
index 0000000..f9fca2a
--- /dev/null
+++ b/data/av.xsd
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:av="urn:schemas-upnp-org:av:av" xmlns:xsd="http://www.w3.org/2001/XMLSchema"; targetNamespace="urn:schemas-upnp-org:av:av" version="3-20101231">
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+		Note that all schema supplied by the UPnP Forum AV WC committee are for informational use only and that the
+		standardized DCPs describe the normative requirements for these schema. Some schema provided do not necessarily
+		embody requirements regarding number of element occurrances allowed or their ordering.
+
+		Schema for UPnP A/V AV
+		</xsd:documentation>
+	</xsd:annotation>
+	<!--=============================-=============================-->
+	<!--                       String Types                        -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="_pName.attributeOnly">
+		<xsd:annotation>
+			<xsd:documentation>
+				Dependent property name that has no associated independent property.
+				MAY include namespace prefix
+				MUST NOT include independent property name
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([\i-[:]][\c-[:]]*:)? [\i-[:]][\c-[:]]*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="_pName.elementIncluded">
+		<xsd:annotation>
+			<xsd:documentation>
+				General property name type
+				MUST include independent property name
+				MAY include namespace prefix
+				MAY include dependent property name
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*(@[\i-[:]][\c-[:]]*)?"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="pName">
+		<xsd:union memberTypes="av:_pName.attributeOnly av:_pName.elementIncluded"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="pName.csv.1-n">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*(@[\i-[:]][\c-[:]])?)|(@[\i-[:]][\c-[:]])(,(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*(@[\i-[:]][\c-[:]])?)|(@[\i-[:]][\c-[:]]))*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="pName.csv.0-n">
+		<xsd:union memberTypes="av:pName.csv.1-n av:string.len.0"/>
+	</xsd:simpleType>
+	<!--
+	     Use the following names in type names that represent individual
+	     strings or delimited sequences of strings to distinguish the cases
+	     where individual string components MUST be empty vs. MAY be empty vs.
+	     MUST NOT be empty:
+
+	        string.len.0
+	        string.len.1_
+			string.len.0_
+	-->
+	<!--4,294,967,295-->
+	<xsd:simpleType name="_unsignedInt0">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="0*[0-9]{1,9}"/>
+			<xsd:pattern value="0*[1-3][0-9]{9}"/>
+			<xsd:pattern value="0*4[0-1][0-9]{8}"/>
+			<xsd:pattern value="0*42[0-8][0-9]{7}"/>
+			<xsd:pattern value="0*429[0-3][0-9]{6}"/>
+			<xsd:pattern value="0*4294[0-8][0-9]{5}"/>
+			<xsd:pattern value="0*42949[0-5][0-9]{4}"/>
+			<xsd:pattern value="0*429496[0-6][0-9]{3}"/>
+			<xsd:pattern value="0*4294967[0-1][0-9]{2}"/>
+			<xsd:pattern value="0*42949672[0-8][0-9]"/>
+			<xsd:pattern value="0*429496729[0-5]"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="_unsignedInt">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="0*(([0-9]{1,9})|([1-3][0-9]{9})|(4[0-1][0-9]{8})|(42[0-8][0-9]{7})|(429[0-3][0-9]{6})|(4294[0-8][0-9]{5})|(42949[0-5][0-9]{4})|(429496[0-6][0-9]{3})|(4294967[0-1][0-9]{2})|(42949672[0-8][0-9])|(429496729[0-5]))"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.len.0">
+		<xsd:restriction base="xsd:string">
+			<xsd:length value="0"/>
+			<xsd:whiteSpace value="collapse"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.len.1_">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="\s*\S+\s*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.len.0_">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.len.0_256">
+		<xsd:restriction base="xsd:string">
+			<xsd:maxLength value="256"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="NCName.len.1_31">
+		<xsd:restriction base="xsd:NCName">
+			<xsd:maxLength value="31"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.0_.string.len.1_">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([^,]|\\,)+(,([^,]|\\,)+)*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.0_.string.len.0_">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([^,]|\\,)*(,([^,]|\\,)*)*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.string.len.1_">
+		<xsd:restriction base="av:csv.0_.string.len.1_">
+			<xsd:minLength value="1"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.string.len.0_">
+		<xsd:restriction base="av:csv.0_.string.len.0_">
+			<xsd:minLength value="1"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.4.string.len.1_">
+		<xsd:restriction base="av:csv.0_.string.len.1_">
+			<xsd:pattern value="([^,]|\\,)+(,([^,]|\\,)+){3}"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.4.string.len.0_">
+		<xsd:restriction base="av:csv.0_.string.len.0_">
+			<xsd:pattern value="([^,]|\\,)*(,([^,]|\\,)*){3}"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.0_.unsignedInteger">
+		<xsd:union memberTypes="av:csv.1_.unsignedInteger av:string.len.0"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.unsignedInteger">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([0-9]+)(,[0-9]+)*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_Name">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="(\i\c*)(,(\i\c*))*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.QName">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*(,([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*)*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.NCName">
+		<xsd:restriction base="av:csv.1_.QName">
+			<xsd:pattern value="[^:]+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="csv.1_.colonDelimPairs">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="[^:]+:[^:]+(,[^:]+:[^:]+)*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                      Named Constants                      -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="string.const.ALL">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="ALL"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.ANY">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="ANY"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.AUTO">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="AUTO"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.DEFAULT">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="DEFAULT"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.FIRST-RUN">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="FIRST-RUN"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.HIGHEST">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="HIGHEST"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.INFINITY">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="INFINITY"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.LOWEST">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="LOWEST"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.NOT_IMPLEMENTED">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="NOT_IMPLEMENTED"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.NOW">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="NOW"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.OBJECTID">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="OBJECTID"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.PREDEF">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="PREDEF"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.REPEAT">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="REPEAT"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.UNBOUNDED">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="UNBOUNDED"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.const.UNKNOWN">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="UNKNOWN"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                     Numeric Datatypes                     -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="unsignedInt.or.UNKNOWN">
+		<xsd:union memberTypes="xsd:unsignedInt av:string.const.UNKNOWN"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="unsignedInt.or.UNBOUNDED">
+		<xsd:union memberTypes="xsd:unsignedInt av:string.const.UNBOUNDED"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="positiveInt">
+		<xsd:restriction base="xsd:unsignedInt">
+			<xsd:minInclusive value="1"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rational">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="-?[0-9]+(/0*[1-9][0-9]*)?"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="nonZeroRational">
+		<xsd:restriction base="av:rational">
+			<xsd:pattern value="[^/]*[1-9].*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="long.-1_">
+		<xsd:restriction base="xsd:long">
+			<xsd:minInclusive value="-1"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="int.-1_">
+		<xsd:restriction base="xsd:int">
+			<xsd:minInclusive value="-1"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                       Time Datatypes                      -->
+	<!--=============================-=============================-->
+	<!--
+				EBNF from ScheduledRecording:1 1.00
+
+		sched-start		::=	date-time	|
+									day-of-yr-time	|
+									named-day-time	|
+									T-labeled-time	|
+									'NOW'
+		start-range		::=	(date-time|'NOW') '/' (date-time|'INFINITY')
+
+		duration			::=	'P' [n 'D'] time
+		duration-long	::=	duration|'INFINITY'
+		duration-any	::=	duration|'INFINITY'|'ANY'
+		duration-adj	::=	('+'|'-') duration
+		duration-range	::=	duration '/' duration-long
+
+		date-time		::=	yyyy '-' mm '-' dd T-labeled-time
+		day-of-yr-time	::=	         mm '-' dd T-labeled-time
+		named-day-time	::=	         named-day T-labeled-time
+
+		T-labeled-time	::=	'T' time [zone]
+		time				::=	HH ':' MM ':' SS
+		zone				::=	'Z'|(('+'|'-') HH ':' MM)
+		month-day		::=	mm '-' dd
+		named-day		::=	'MON'|'TUE'|'WED'|'THU'|'FRI'|'SAT'|'SUN'|
+									'MON-FRI'|'MON-SAT'
+		n					::=	1*DIGIT (* non-negative integer *)
+		yyyy				::=	4DIGIT  (* 0001-9999 *)
+		mm					::=	2DIGIT  (* 01-12 *)
+
+	-->
+	<xsd:simpleType name="dateTime">
+		<xsd:annotation>
+			<xsd:documentation> Disallows fractional seconds </xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:dateTime">
+			<xsd:pattern value="[^\.]*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="signedDuration">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="[-+]P([0-9]*D)?(2[0-3]|[0-1][0-9])(:[0-5][0-9]){2}"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="unsignedDuration">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="P([0-9]*D)?(2[0-3]|[0-1][0-9])(:[0-5][0-9]){2}"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="unsignedDuration.or.INFINITY">
+		<xsd:union memberTypes="av:unsignedDuration av:string.const.INFINITY"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="unsignedDuration.or.INFINITY.or.ANY">
+		<xsd:union memberTypes="av:unsignedDuration.or.INFINITY av:string.const.ANY"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="dayOfWeek.en.len.3">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="SUN"/>
+			<xsd:enumeration value="MON"/>
+			<xsd:enumeration value="TUE"/>
+			<xsd:enumeration value="WED"/>
+			<xsd:enumeration value="THU"/>
+			<xsd:enumeration value="FRI"/>
+			<xsd:enumeration value="SAT"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!-- Original duration definition in CDS:1 -->
+	<xsd:simpleType name="duration.cds1.decFrac">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="[-+]?[0-9]+(:[0-5][0-9]){2}(\.[0-9]+)?"/>
+		</xsd:restriction>
+		<!-- Decimal fraction version -->
+	</xsd:simpleType>
+	<xsd:simpleType name="duration.cds1.numDenomFrac">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="[-+]?[0-9]+(:[0-5][0-9]){2}(\.[0-9]+/[0-9]+)?"/>
+		</xsd:restriction>
+		<!-- Numerator/denominator fraction version -->
+	</xsd:simpleType>
+	<xsd:simpleType name="duration.cds1">
+		<xsd:union memberTypes="av:duration.cds1.decFrac av:duration.cds1.numDenomFrac"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="duration.cds1.or.NOT_IMPLEMENTED">
+		<xsd:union memberTypes="av:duration.cds1 av:string.const.NOT_IMPLEMENTED"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="daylightSaving.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="startTimeUsage">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                Internet-related datatypes                 -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="domainName">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value="([^\.]+\.)+[^\.]+\.?"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--===========================================================-->
+	<!--                                                           -->
+	<!--                  UPnP Specific Datatypes                  -->
+	<!--                                                           -->
+	<!--===========================================================-->
+	<xsd:simpleType name="UDN">
+		<xsd:restriction base="xsd:anyURI">
+			<xsd:pattern value="uuid:.+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--===========================================================-->
+	<!--                                                           -->
+	<!--                   AV Specific Datatypes                   -->
+	<!--                                                           -->
+	<!--===========================================================-->
+	<xsd:simpleType name="sched-start">
+		<xsd:union memberTypes="av:dateTime xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="dateTime-range">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value=".+/.+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="duration-range">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value=".+/.+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="radioBand.wc.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="AM"/>
+			<xsd:enumeration value="FM"/>
+			<xsd:enumeration value="Shortwave"/>
+			<xsd:enumeration value="Internet"/>
+			<xsd:enumeration value="Satellite"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="radioBand.type">
+		<xsd:union memberTypes="av:radioBand.wc.values av:radioBand.vx.values"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                    Simple Common Types                    -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="_id.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="_classNameBase.type">
+		<xsd:restriction base="xsd:NCName"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="_title.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="stateUpdateID.type">
+		<xsd:restriction base="xsd:unsignedInt"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="string.domainNamePrefixed">
+		<xsd:annotation>
+			<xsd:documentation>
+				string.domainNamePrefixed == Domain Name Prefix type
+				This type is defined in ContentDirectory:2 and ScheduledRecording:1 as
+				string.domainNamePrefixed ::= domain-name '_' string
+				Therefore, the only requirement imposed here is the occurrence of at
+				least one underscore that has at least one character before and after it.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value=".+_.+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                   Storage Related Types                   -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="storageMedium.type">
+		<xsd:attribute name="val" type="av:storageMedium.values" use="required"/>
+	</xsd:complexType>
+	<xsd:simpleType name="storageMedium.wc.values">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="UNKNOWN"/>
+			<xsd:enumeration value="DV"/>
+			<xsd:enumeration value="MINI-DV"/>
+			<xsd:enumeration value="VHS"/>
+			<xsd:enumeration value="W-VHS"/>
+			<xsd:enumeration value="S-VHS"/>
+			<xsd:enumeration value="D-VHS"/>
+			<xsd:enumeration value="VHSC"/>
+			<xsd:enumeration value="VIDEO8"/>
+			<xsd:enumeration value="HI8"/>
+			<xsd:enumeration value="CD-ROM"/>
+			<xsd:enumeration value="CD-DA"/>
+			<xsd:enumeration value="CD-R"/>
+			<xsd:enumeration value="CD-RW"/>
+			<xsd:enumeration value="VIDEO-CD"/>
+			<xsd:enumeration value="SACD"/>
+			<xsd:enumeration value="MD-AUDIO"/>
+			<xsd:enumeration value="MD-PICTURE"/>
+			<xsd:enumeration value="DVD-ROM"/>
+			<xsd:enumeration value="DVD-VIDEO"/>
+			<xsd:enumeration value="DVD+R"/>
+			<xsd:enumeration value="DVD-R"/>
+			<xsd:enumeration value="DVD+RW"/>
+			<xsd:enumeration value="DVD-RW"/>
+			<xsd:enumeration value="DVD-RAM"/>
+			<xsd:enumeration value="DVD-AUDIO"/>
+			<xsd:enumeration value="DAT"/>
+			<xsd:enumeration value="LD"/>
+			<xsd:enumeration value="HDD"/>
+			<xsd:enumeration value="MICRO-MV"/>
+			<xsd:enumeration value="NETWORK"/>
+			<xsd:enumeration value="NONE"/>
+			<xsd:enumeration value="NOT_IMPLEMENTED"/>
+			<xsd:enumeration value="SD"/>
+			<xsd:enumeration value="PC-CARD"/>
+			<xsd:enumeration value="MMC"/>
+			<xsd:enumeration value="CF"/>
+			<xsd:enumeration value="BD"/>
+			<xsd:enumeration value="MS"/>
+			<xsd:enumeration value="HD_DVD"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="storageMedium.values">
+		<xsd:union memberTypes="av:storageMedium.wc.values av:storageMedium.vx.values"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                   Program Related Types                   -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="SIprogramID.type">
+		<xsd:restriction base="av:csv.4.string.len.1_"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="SIseriesID.type">
+		<xsd:restriction base="av:csv.4.string.len.1_"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="programID_at_type.wc.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="SI_PROGRAMID"/>
+			<xsd:enumeration value="SI_SERIESID"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="programID_at_type.values">
+		<xsd:union memberTypes="av:programID_at_type.wc.values av:programID_at_type.vx.values"/>
+	</xsd:simpleType>
+	<xsd:complexType name="programID.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="type" type="av:programID_at_type.values"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="channelID_at_type.wc.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="ANALOG"/>
+			<xsd:enumeration value="DIGITAL"/>
+			<xsd:enumeration value="FREQUENCY"/>
+			<xsd:enumeration value="SI"/>
+			<xsd:enumeration value="LINE"/>
+			<xsd:enumeration value="NETWORK"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="channelID_at_type.values">
+		<xsd:union memberTypes="av:channelID_at_type.wc.values av:channelID_at_type.vx.values"/>
+	</xsd:simpleType>
+	<xsd:complexType name="channelID.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:token">
+				<xsd:attribute name="type" type="av:channelID_at_type.values" use="required"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="csv.1_.allowedUse">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="(PLAY|COPY|MOVE|UNKNOWN):(-1|[0-9]+)(,(PLAY|COPY|MOVE|UNKNOWN):(-1|[0-9]+))*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:complexType name="programCode.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:token">
+				<xsd:attribute name="type" type="av:programCode_at_type.vd.values"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="rating_at_type.wc.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="MPAA.ORG"/>
+			<xsd:enumeration value="RIAA.ORG"/>
+			<xsd:enumeration value="ESRB.ORG"/>
+			<xsd:enumeration value="TVGUIDELINES.ORG"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating_at_type.values">
+		<xsd:union memberTypes="av:rating_at_type.wc.values av:rating_at_type.vx.values"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.MPAA.ORG.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="G"/>
+			<xsd:enumeration value="PG"/>
+			<xsd:enumeration value="R"/>
+			<xsd:enumeration value="PG-13"/>
+			<xsd:enumeration value="R"/>
+			<xsd:enumeration value="NC-17"/>
+			<xsd:enumeration value="NR"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.RIIA.ORG.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value=""/>
+			<xsd:enumeration value="PA-EC"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.ESRB.ORG.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="EC"/>
+			<xsd:enumeration value="E"/>
+			<xsd:enumeration value="E10+"/>
+			<xsd:enumeration value="T"/>
+			<xsd:enumeration value="M"/>
+			<xsd:enumeration value="AO"/>
+			<xsd:enumeration value="RP"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.TVGUIDELINES.ORG.values">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="TV-Y"/>
+			<xsd:enumeration value="TV-Y7"/>
+			<xsd:enumeration value="TV-Y7FV"/>
+			<xsd:enumeration value="TV-G"/>
+			<xsd:enumeration value="TV-PG"/>
+			<xsd:enumeration value="TV-14"/>
+			<xsd:enumeration value="TV-MA"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.wc.values">
+		<xsd:union memberTypes="av:rating.MPAA.ORG.values av:rating.RIIA.ORG.values av:rating.ESRB.ORG.values av:rating.TVGUIDELINES.ORG.values"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.values">
+		<xsd:union memberTypes="av:rating.wc.values av:rating.vx.values"/>
+	</xsd:simpleType>
+	<xsd:complexType name="rating.type">
+		<xsd:simpleContent>
+			<xsd:extension base="av:rating.values">
+				<xsd:attribute name="type" type="av:rating_at_type.values"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="FIRST-RUN.or.REPEAT">
+		<xsd:union memberTypes="av:string.const.FIRST-RUN av:string.const.REPEAT"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="ALL.or.FIRST-RUN.or.REPEAT">
+		<xsd:union memberTypes="av:string.const.ALL av:string.const.FIRST-RUN av:string.const.REPEAT"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--          User Channel and EPG Related Properties          -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="channelGroupName.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="id" type="av:string.domainNamePrefixed"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="stationCallSign.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="signalStrength.wc.type">
+		<xsd:restriction base="xsd:int">
+			<xsd:minInclusive value="-1"/>
+			<xsd:maxInclusive value="100"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="signalStrength.type">
+		<xsd:union memberTypes="av:signalStrength.wc.type av:signalStrength.vx.type"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--                Bookmark Related Properties                -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="serviceType">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="[^#:]{1,64}:[1-9][0-9]*"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="serviceId">
+		<xsd:restriction base="xsd:token">
+			<xsd:pattern value="[^:]{1,64}"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:complexType name="deviceUDN.type">
+		<xsd:simpleContent>
+			<xsd:extension base="av:UDN">
+				<xsd:attribute name="serviceType" type="av:serviceType" use="required"/>
+				<xsd:attribute name="serviceId" type="av:serviceId" use="required"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=================================-=================================-->
+	<!--                                                                   -->
+	<!--                    Extension Master Datatypes                     -->
+	<!--                                                                   -->
+	<!--=================================-=================================-->
+	<xsd:simpleType name="extensions.simpleType.none">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this type wherever extensions to a simpleType are allowed by the specification,
+				but they are disallowed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:NCName">
+			<xsd:pattern value="[:]+"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:group name="extensions.elementType.none">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this group wherever element extensions are allowed by the specification,
+				but they are disallowed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:any minOccurs="0" maxOccurs="0"/>
+		</xsd:choice>
+	</xsd:group>
+	<xsd:attributeGroup name="extensions.attributes.none">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this group wherever attribute extensions are allowed by the specification,
+				but they are disallowed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attributeGroup>
+	<xsd:simpleType name="extensions.simpleType.any">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this type wherever extensions to a simpleType are allowed by the specification,
+				and no constraints are imposed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:union memberTypes="xsd:duration xsd:date xsd:dateTime xsd:time xsd:gDay xsd:gMonth xsd:gMonthDay xsd:gYear xsd:gYearMonth xsd:boolean xsd:float xsd:decimal xsd:double xsd:anyURI xsd:QName xsd:string xsd:base64Binary xsd:hexBinary"/>
+	</xsd:simpleType>
+	<xsd:group name="extensions.elementType.any">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this group wherever element extensions are allowed by the specification,
+				and no constraints are imposed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:any minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:choice>
+	</xsd:group>
+	<xsd:attributeGroup name="extensions.attributes.any">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+				Use this group wherever attribute extensions are allowed by the specification,
+				and no constraints are imposed for testing validation purposes.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:anyAttribute/>
+	</xsd:attributeGroup>
+	<!--===================================================================-->
+	<!--                                                                   -->
+	<!--                   Extension Component Datatypes                   -->
+	<!--                                                                   -->
+	<!--===================================================================-->
+	<xsd:simpleType name="storageMedium.vx.values">
+		<xsd:restriction base="av:extensions.simpleType.any"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="programID_at_type.vx.values">
+		<xsd:restriction base="av:domainName"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="channelID_at_type.vx.values">
+		<xsd:restriction base="xsd:token"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating_at_type.vx.values">
+		<xsd:restriction base="av:string.domainNamePrefixed"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="rating.vx.values">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="radioBand.vx.values">
+		<xsd:restriction base="xsd:token"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="signalStrength.vx.type">
+		<xsd:restriction base="xsd:int"/>
+	</xsd:simpleType>
+	<!--===================================================================-->
+	<!--                                                                   -->
+	<!--                Vendor-Defined Component Datatypes                 -->
+	<!--                                                                   -->
+	<!--===================================================================-->
+	<xsd:simpleType name="didl-lite_COLON_at_id.vd.type">
+		<xsd:restriction base="av:_id.type"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="srs_COLON_at_id.vd.type">
+		<xsd:restriction base="av:_id.type"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="programCode_at_type.vd.values">
+		<xsd:restriction base="av:string.domainNamePrefixed"/>
+	</xsd:simpleType>
+</xsd:schema>
diff --git a/data/didl-lite-v2.xsd b/data/didl-lite-v2.xsd
new file mode 100644
index 0000000..6b05b1f
--- /dev/null
+++ b/data/didl-lite-v2.xsd
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:av="urn:schemas-upnp-org:av:av" xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:didl-lite="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified" attributeFormDefault="unqualified" version="2-20060531">
+
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+			DIDL-Lite schema for UPnP A/V ContentDirectory services,
+			version 2.0.
+		</xsd:documentation>
+	</xsd:annotation>
+
+	<xsd:import namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" schemaLocation="http://www.upnp.org/schemas/av/upnp.xsd"/>
+	<xsd:import namespace="urn:schemas-upnp-org:av:av" schemaLocation="http://www.upnp.org/schemas/av/av.xsd"/>
+	<xsd:import namespace="http://purl.org/dc/elements/1.1/"; schemaLocation="http://dublincore.org/schemas/xmls/simpledc20021212.xsd"/>
+	<xsd:import namespace="http://www.w3.org/XML/1998/namespace"; schemaLocation="http://www.w3.org/2005/08/xml.xsd"/>
+
+	<!--============================================================
+
+	This group defines the subset of Dublin Core elements that are
+	employed in DIDL-Lite.
+
+		Included            Excluded
+		___________         ___________
+		title               subject
+		rights              type
+		description         format
+		date                identifier
+		language            source
+		creator             coverage
+		publisher
+		contributor
+		relation
+	============================================================-->
+	<xsd:group name="DublinCoreUsedExcluding-title">
+		<xsd:choice>
+			<xsd:element ref="dc:contributor"/>
+			<xsd:element ref="dc:creator"/>
+<!-- XXX - JGR
+			 Would like to use an extension of the dc:date element rather than an extension its data type ("dc:elementType").
+			As it is now, changes to the dc:date element are not propagated to the 'qualifedDate' data type.  Also, the
+			namespace of the <date> element is no longer "dc" but rather "didl-lite" which is not exactly what we want.
+			<dc:date didl-lite:daylightSaving="STANDARD">datevalue</dc:date>
+			<xsd:element ref="dc:date"/>
+			<xsd:element ref="didl-lite:qualifiedDCDate"/>
+			<xsd:element name="dcDate" type="didl-lite:qualifiedDCDate"/>
+-->
+			<xsd:element ref="dc:date"/>
+			<xsd:element ref="dc:description"/>
+			<xsd:element ref="dc:language"/>
+			<xsd:element ref="dc:publisher"/>
+			<xsd:element ref="dc:relation"/>
+			<xsd:element ref="dc:rights"/>
+		</xsd:choice>
+	</xsd:group>
+
+<!-- XXX - JGR
+	<xsd:complexType name="qualifiedDCDate">
+		<xsd:complexContent>
+			<xsd:element ref="dc:date">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:element>
+		</xsd:complexContent>
+	</xsd:complexType>
+-->
+	<xsd:complexType name="qualifiedDCDate">
+		<xsd:simpleContent>
+			<xsd:extension base="dc:elementType">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+
+
+	<!--============================================================
+	'DIDL-Lite' is the root element of DIDL-Lite documents.
+
+	Attributes:
+		xml:lang: optional. The 'xml:lang' attribute may optionally be
+			used to specify the language of text in the DIDL-Lite document.
+	============================================================-->
+	<xsd:group name="allowed-under-DIDL-Lite">
+		<xsd:annotation>
+			<xsd:documentation>
+				This group defines the elements allowed under the
+				DIDL-Lite root
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:element name="item" type="didl-lite:item.type"/>
+			<xsd:element name="container" type="didl-lite:container.type"/>
+			<xsd:element name="desc" type="didl-lite:desc.type"/>
+		</xsd:choice>
+	</xsd:group>
+	<xsd:element name="DIDL-Lite" type="didl-lite:root.type"/>
+	<xsd:complexType name="root.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				DIDL-Lite is the root element
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:group ref="didl-lite:allowed-under-DIDL-Lite" maxOccurs="unbounded"/>
+		<xsd:attribute ref="xml:lang"/>
+	</xsd:complexType>
+
+
+	<!--============================================================
+		Parts shared by 'container' and 'item' objects.
+		============================================================-->
+
+	<xsd:attributeGroup name="commonAttrs-item-container.group">
+		<xsd:attribute name="id" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="parentID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="restricted" type="xsd:boolean" use="required"/>
+		<xsd:attribute name="neverPlayable" type="xsd:boolean"/>
+	</xsd:attributeGroup>
+
+	<!--============================================================
+		A 'container' element may contain any number of
+		1. Dublin Core,
+		2. upnp,
+		3. res,
+		4. ref,
+		5. item,
+		6. container, and
+		7. desc elements.
+
+		In all cases, the first element in container child element sequence
+		is required to be "dc:title".
+		The 'upnp:class' must also appear under container.
+		Each container is required to specify a value for the 'id' and
+		'parentID' attributes.
+		Each container is also required to specify a value for the
+		'restricted' attribute (true, false, 1, 0).
+		When restricted="true", the ability to change or delete the
+		Container is restricted.
+		Other optional container elements are:
+
+		'parentID', 'childCount', and 'searchable'.
+		Other optional attributes are 'childCount' and 'searchable'.
+
+		id:			type: string	use: required
+		parentID:	type: string	use: required
+		restricted:	type: string	use: required
+		searchable:	type: string	use: optional
+		childCount:	type: string	use: optional
+
+		The equivalent MPEG21 DIDL element is 'CONTAINER'
+		============================================================-->
+	<xsd:group name="allowed-under-container">
+		<xsd:annotation>
+			<xsd:documentation>
+				This group defines the elements allowed under the
+				'container' element
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:group ref="upnp:upnpForContainer"/>
+			<xsd:group ref="didl-lite:DublinCoreUsedExcluding-title"/>
+			<xsd:element name="desc" type="didl-lite:desc.type"/>
+			<xsd:element name="item" type="didl-lite:item.type"/>
+			<xsd:element name="container" type="didl-lite:container.type"/>
+			<xsd:element name="res" type="didl-lite:res.type"/>
+		</xsd:choice>
+	</xsd:group>
+
+	<xsd:complexType name="container.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				'container' element may contain any number of
+				1. Dublin Core,
+				2. upnp,
+				3. res,
+				4. ref,
+				5 item,
+				6. container and
+				7. desc elements.
+				In all cases, the first element in each container child
+				element sequence is required to be "dc:title".
+				A 'upnp:class' element must also appear under container.
+				container is required to specify a value for the 'id' and
+				'parentID' attributes.
+				container is also required to specify a value for the
+				'restricted' attribute (true, false, 1, 0).
+				When restricted="true", the ability to change or delete the
+				container is restricted.
+				Optional container element attributes are 'childCount', and
+				'searchable'.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element ref="dc:title"/>
+			<xsd:group ref="didl-lite:allowed-under-container" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:group ref="upnp:class.group"/>
+			<xsd:group ref="didl-lite:allowed-under-container" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attributeGroup ref="didl-lite:commonAttrs-item-container.group"/>
+		<xsd:attribute name="searchable" type="xsd:boolean"/>
+		<xsd:attribute name="childCount" type="xsd:unsignedInt"/>
+	</xsd:complexType>
+<!--============================================================
+	An 'item' element contains any number of
+	1. Dublin Core,
+	2. upnp,
+	3. res, and
+	4. desc elements.
+
+	In all cases, the first element in each item child element
+	sequence is required to be "dc:title".
+	The 'upnp:class' element must also appear under item.
+	Each item is additionally required to specify a value for the 'id'
+	attribute. If the item is actually a reference to another item, a
+	value for 'refID' is specified.
+	Each item is also required to specify a value for the 'parentID'
+	Attribute and the 'restricted' attribute (true, false, 1, 0).
+	When restricted="true", the ability to change or delete the item is
+	restricted.
+
+	Attributes:
+	Id:			type: string	use: required
+	parentID:	type: string	use: required
+	refID:		type: string	use: optional
+	restricted:	type: boolean	use: required
+
+	The equivalent MPEG21 DIDL element is 'ITEM'.
+	============================================================-->
+	<xsd:group name="allowed-under-item">
+		<xsd:annotation>
+			<xsd:documentation>
+				This group defines the elements allowed under the 'item'
+				Element
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:group ref="upnp:upnpForItem"/>
+			<xsd:group ref="didl-lite:DublinCoreUsedExcluding-title"/>
+			<xsd:element name="desc" type="didl-lite:desc.type"/>
+			<xsd:element name="res" type="didl-lite:res.type"/>
+		</xsd:choice>
+	</xsd:group>
+
+	<xsd:complexType name="item.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				'item' element contains any number of
+				1. Dublin Core,
+				2. upnp,
+				3. res, and
+				4. desc elements.
+				In all cases, the first element in each item child element
+				sequence is required to be "dc:title".
+				A 'upnp:class' element must also appear under item.
+				Item is additionally required to specify a value for the
+				'id' attribute.
+				If the item is actually a reference to another item,
+				a value for 'refID' must be specified.
+				Item is also required to specify a value for the 'parentID'
+				attribute, and the 'restricted' attribute
+				(true, false, 1, 0).
+				When restricted="true", the ability to change or delete the
+				item is restricted.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element ref="dc:title"/>
+			<xsd:group ref="didl-lite:allowed-under-item" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:group ref="upnp:class.group"/>
+			<xsd:group ref="didl-lite:allowed-under-item" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attributeGroup ref="didl-lite:commonAttrs-item-container.group"/>
+		<xsd:attribute name="refID" type="av:didl-lite_COLON_at_id.vd.type"/>
+	</xsd:complexType>
+<!--============================================================
+	A 'res' element indentifies a resource. A resource is typically
+	some type of asset, such as a photo, song, video, etc.
+	A 'res' element contains a URI that identifies the resource.
+
+	Attributes:
+
+	'importUri'			type: anyURI			use: optional
+	The 'importUri' attribute is the optional uri locator for
+	resource updates.
+
+	'protocolInfo'		type: string			use: required
+	The 'protocolInfo' attribute is a string that identifies the
+	streaming or transport protocol for transmitting the resource.
+	If not present then the content has not yet been fully imported by
+	the ContentDirectory service and is not yet accessible for playback.
+
+	'size'				type: unsignedLong	use: optional
+	size, in bytes, of the resource.
+
+	'duration' 			type: string			use: optional
+	The 'duration' attribute identifies the duration of the playback of
+	the resource, at normal speed.
+
+	The format of the duration string is:
+	H+:MM:SS[.F+], or H+:MM:SS[.F0/F1]
+	Where:
+	+H		one or more digits to indicate elapsed hours,
+	MM		exactly 2 digits to indicate minutes (00 to 59),
+	SS		exactly 2 digits to indicate seconds (00 to 59),
+	F+		any number of digits (including no digits) to indicate fractions of seconds,
+	F0/F1	a fraction, with F0 and F1 at least one digit long,
+			and F0 < F1.
+	The string may be preceded by an optional + or - sign, and the
+	decimal point itself may be omitted if there are no fractional	seconds digits.
+
+	'bitrate'			type: unsignedInt		use: optional
+	The bitrate in bytes/second of the resource.
+
+	'sampleFrequency'	type: unsignedInt		use: optional
+	The sample frequency of the resource in Hz
+
+	'bitsPerSample'	type: unsignedInt		use: optional
+	The bits per sample of the resource.
+
+	'nrAudioChannels'	type: unsignedInt		use: optional
+	Number of audio channels of the resource, e.g. 1 for mono,
+	2 for stereo, 6 for Dolby surround, etc.
+
+	'resolution'		type: string			use: optional
+	X*Y resolution of the resource (image or video).
+	The string pattern is restricted to strings of the form:
+	[0-9]+x[0-9]+
+	(one or more digits,'x', followed by one or more digits).
+
+	'colorDepth'		type: unsignedInt		use: optional
+	The color depth in bits of the resource (image or video).
+
+	'protection'		type: string			use: optional
+	Some statement of the protection type of the resource
+	(not standardized).
+
+	The equivalent MPEG21 DIDL element is 'RESOURCE'.
+	============================================================-->
+
+	<!--=============================-=============================-->
+	<!--       Resource Encoding Characteristics Properties        -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="res.type" mixed="true">
+		<xsd:annotation>
+			<xsd:documentation>
+				A 'res' element indentifies a resource.
+				A resource is typically some type of binary asset,
+				such as a photo, song, video, etc.
+				A 'res' element contains a URI that identifies the resource
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:anyURI">
+				<xsd:attribute name="importUri" type="xsd:anyURI"/>
+				<xsd:attribute name="protocolInfo" type="xsd:string" use="required"/>
+				<xsd:attribute name="size" type="xsd:unsignedLong"/>
+				<xsd:attribute name="duration" type="av:duration.cds1"/>
+				<xsd:attribute name="bitrate" type="xsd:unsignedInt"/>
+				<xsd:attribute name="sampleFrequency" type="xsd:unsignedInt"/>
+				<xsd:attribute name="bitsPerSample" type="xsd:unsignedInt"/>
+				<xsd:attribute name="nrAudioChannels" type="xsd:unsignedInt"/>
+				<xsd:attribute name="resolution">
+					<xsd:simpleType>
+						<xsd:restriction base="xsd:string">
+							<xsd:pattern value="[0-9]+x[0-9]+"/>
+						</xsd:restriction>
+					</xsd:simpleType>
+				</xsd:attribute>
+				<xsd:attribute name="colorDepth" type="xsd:unsignedInt"/>
+				<xsd:attribute name="tspec" type="av:string.len.0_256"/>
+				<xsd:attribute name="allowedUse" type="av:csv.1_.allowedUse"/>
+				<xsd:attribute name="validityStart" type="av:dateTime"/>
+				<xsd:attribute name="validityEnd" type="av:dateTime"/>
+				<xsd:attribute name="remainingTime" type="av:unsignedDuration"/>
+				<xsd:attribute name="updateCount" type="xsd:unsignedInt"/>
+				<xsd:attribute name="usageInfo" type="xsd:string"/>
+				<xsd:attribute name="rightsInfoURI" type="xsd:anyURI"/>
+				<xsd:attribute name="contentInfoURI" type="xsd:anyURI"/>
+				<xsd:attribute name="recordQuality" type="av:csv.1_.colonDelimPairs"/>
+				<xsd:attribute name="protection" type="xsd:string"/>
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+<!--============================================================
+	A 'desc' element identifies a descriptor.
+	A descriptor is intended to contain a block of metadata.
+	The bio of a music artist is an example use of a 'desc' element.
+	A 'desc' element may possess child elements from any namespace
+	except the DIDL-Lite namespace.
+	Values for 'id' and 'nameSpace' are required.
+	An optional 'type' attribute allows designation of the metadata
+	type, e.g. 'ratings', 'rights', etc.
+
+	Attributes:
+
+	'id'            type: string    use: required
+	'type'          type: string    use: optional
+	'nameSpace'     type: uri       use: required
+
+	The equivalent MPEG21 DIDL element is 'DESCRIPTOR'.
+	============================================================-->
+	<xsd:complexType name="desc.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				A'desc' element identifies a descriptor.
+				A descriptor is intended to contain a block of metadata.
+				The bio of a music artist is an example use of 'desc'.
+				A 'desc' element may possess child elements from any
+				namespace except the DIDL-Lite namespace.
+				A value for 'id' is required.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:any namespace="##other"/>
+		</xsd:sequence>
+		<xsd:attribute name="id" type="xsd:string" use="required"/>
+		<xsd:attribute name="type" type="xsd:string"/>
+		<xsd:attribute name="nameSpace" type="xsd:anyURI" use="required"/>
+	</xsd:complexType>
+
+	<!--===================================================================-->
+	<!--                                                                   -->
+	<!--                Vendor-Defined Component Datatypes                 -->
+	<!--                                                                   -->
+	<!--===================================================================-->
+
+</xsd:schema>
diff --git a/data/simpledc20021212.xsd b/data/simpledc20021212.xsd
new file mode 100644
index 0000000..36f9057
--- /dev/null
+++ b/data/simpledc20021212.xsd
@@ -0,0 +1,71 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns="http://purl.org/dc/elements/1.1/"; targetNamespace="http://purl.org/dc/elements/1.1/"; elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+  <xs:annotation>
+    <xs:documentation xml:lang="en">
+      Simple DC XML Schema, 2002-10-09
+      by Pete Johnston (p johnston ukoln ac uk),
+      Carl Lagoze (lagoze cs cornell edu), Andy Powell (a powell ukoln ac uk),
+      Herbert Van de Sompel (hvdsomp yahoo com).
+      This schema defines terms for Simple Dublin Core, i.e. the 15
+      elements from the http://purl.org/dc/elements/1.1/ namespace, with
+      no use of encoding schemes or element refinements.
+      Default content type for all elements is xs:string with xml:lang
+      attribute available.
+
+      Supercedes version of 2002-03-12.
+      Amended to remove namespace declaration for http://www.w3.org/XML/1998/namespace namespace,
+      and to reference lang attribute via built-in xml: namespace prefix.
+      xs:appinfo also removed.
+    </xs:documentation>
+  </xs:annotation>
+
+  <xs:import namespace="http://www.w3.org/XML/1998/namespace"; schemaLocation="http://www.w3.org/2001/03/xml.xsd";>
+  </xs:import>
+
+  <xs:element name="title" type="elementType"/>
+  <xs:element name="creator" type="elementType"/>
+  <xs:element name="subject" type="elementType"/>
+  <xs:element name="description" type="elementType"/>
+  <xs:element name="publisher" type="elementType"/>
+  <xs:element name="contributor" type="elementType"/>
+  <xs:element name="date" type="elementType"/>
+  <xs:element name="type" type="elementType"/>
+  <xs:element name="format" type="elementType"/>
+  <xs:element name="identifier" type="elementType"/>
+  <xs:element name="source" type="elementType"/>
+  <xs:element name="language" type="elementType"/>
+  <xs:element name="relation" type="elementType"/>
+  <xs:element name="coverage" type="elementType"/>
+  <xs:element name="rights" type="elementType"/>
+
+  <xs:group name="elementsGroup">
+  <xs:sequence>
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
+      <xs:element ref="title"/>
+      <xs:element ref="creator"/>
+      <xs:element ref="subject"/>
+      <xs:element ref="description"/>
+      <xs:element ref="publisher"/>
+      <xs:element ref="contributor"/>
+      <xs:element ref="date"/>
+      <xs:element ref="type"/>
+      <xs:element ref="format"/>
+      <xs:element ref="identifier"/>
+      <xs:element ref="source"/>
+      <xs:element ref="language"/>
+      <xs:element ref="relation"/>
+      <xs:element ref="coverage"/>
+      <xs:element ref="rights"/>
+    </xs:choice>
+    </xs:sequence>
+  </xs:group>
+
+  <xs:complexType name="elementType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute ref="xml:lang" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+</xs:schema>
\ No newline at end of file
diff --git a/data/upnp.xsd b/data/upnp.xsd
new file mode 100644
index 0000000..0d8045b
--- /dev/null
+++ b/data/upnp.xsd
@@ -0,0 +1,841 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:av="urn:schemas-upnp-org:av:av" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"; targetNamespace="urn:schemas-upnp-org:metadata-1-0/upnp/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="4-20101231">
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+		Note that all schema supplied by the UPnP Forum AV WC committee are for informational use only and that the
+		standardized DCPs describe the normative requirements for these schema. Some schema provided do not necessarily
+		embody requirements regarding number of element occurrances allowed or their ordering.
+
+		</xsd:documentation>
+	</xsd:annotation>
+
+	<!-- This schema defines the upnp namespace tags that are employed
+		as descriptors by the DIDL-Lite schema -->
+	<xsd:import namespace="urn:schemas-upnp-org:av:av" schemaLocation="http://www.upnp.org/schemas/av/av.xsd"/>
+	<xsd:group name="class.group">
+		<xsd:sequence>
+			<xsd:element name="class" type="upnp:class.type"/>
+		</xsd:sequence>
+	</xsd:group>
+	<xsd:group name="upnpForContainer">
+		<xsd:choice>
+			<!--=============================-=============================-->
+			<!--                      Base Properties                      -->
+			<!--=============================-=============================-->
+			<xsd:element name="searchClass" type="upnp:searchClass.type"/>
+			<xsd:element name="createClass" type="upnp:searchClass.type"/>
+			<xsd:element name="writeStatus" type="upnp:status.type"/>
+			<!--=============================-=============================-->
+			<!--                 objectLink Properties                  -->
+			<!--=============================-=============================-->
+			<xsd:element name="objectLink" type="upnp:objectLink.type"/>
+			<xsd:element name="objectLinkRef" type="upnp:objectLinkRef.type"/>
+			<!--=============================-=============================-->
+			<!--                 resExt Properties                   -->
+			<!--=============================-=============================-->
+			<xsd:element name="resExt" type="upnp:resExt.type"/>
+			<!--=============================-=============================-->
+			<!--               Contributor Related Properties              -->
+			<!--=============================-=============================-->
+			<xsd:element name="artist" type="upnp:personWithRole.type"/>
+			<xsd:element name="actor" type="upnp:personWithRole.type"/>
+			<xsd:element name="author" type="upnp:personWithRole.type"/>
+			<xsd:element name="producer" type="upnp:person.type"/>
+			<xsd:element name="director" type="upnp:person.type"/>
+			<!--=============================-=============================-->
+			<!--               Affiliation Related Properties              -->
+			<!--=============================-=============================-->
+			<xsd:element name="genre" type="upnp:genre.type"/>
+			<xsd:element name="album" type="av:_title.type"/>
+			<xsd:element name="playlist" type="av:_title.type"/>
+			<!--=============================-=============================-->
+			<!--              Associated Resources Properties              -->
+			<!--=============================-=============================-->
+			<xsd:element name="albumArtURI" type="xsd:anyURI"/>
+			<xsd:element name="artistDiscographyURI" type="xsd:anyURI"/>
+			<xsd:element name="lyricsURI" type="xsd:anyURI"/>
+			<!-- Should have something restricting dc:relation to a URI. -->
+			<!--=============================-=============================-->
+			<!--                 Storage Related Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="storageTotal" type="av:long.-1_"/>
+			<xsd:element name="storageUsed" type="av:long.-1_"/>
+			<xsd:element name="storageFree" type="av:long.-1_"/>
+			<xsd:element name="storageMaxPartition" type="av:long.-1_"/>
+			<xsd:element name="storageMedium" type="av:storageMedium.values"/>
+			<!--=============================-=============================-->
+			<!--               General Description Properties              -->
+			<!--                   (mainly for UI purposes)                -->
+			<!--=============================-=============================-->
+			<xsd:element name="longDescription" type="xsd:string"/>
+			<xsd:element name="icon" type="xsd:anyURI"/>
+			<xsd:element name="region" type="xsd:string"/>
+			<xsd:element name="rights" type="xsd:string"/>
+			<xsd:element name="playbackCount" type="av:int.-1_"/>
+			<xsd:element name="lastPlaybackTime" type="upnp:qualifiedDateTime"/>
+			<xsd:element name="lastPlaybackPosition" type="av:unsignedDuration"/>
+			<xsd:element name="recordedStartDateTime" type="upnp:qualifiedDateTime"/>
+			<xsd:element name="recordedDuration" type="av:unsignedDuration"/>
+			<xsd:element name="recordedDayOfWeek" type="av:dayOfWeek.en.len.3"/>
+			<xsd:element name="srsRecordSchedule" type="av:srs_COLON_at_id.vd.type"/>
+			<xsd:element name="srsRecordTaskID" type="av:srs_COLON_at_id.vd.type"/>
+			<xsd:element name="recordable" type="xsd:boolean"/>
+			<!--=============================-=============================-->
+			<!--            Recorded Object Related Properties             -->
+			<!--=============================-=============================-->
+			<xsd:element name="programTitle" type="xsd:string"/>
+			<xsd:element name="seriesTitle" type="xsd:string"/>
+			<xsd:element name="programID" type="av:programID.type"/>
+			<xsd:element name="seriesID" type="av:programID.type"/>
+			<xsd:element name="channelID" type="av:channelID.type"/>
+			<xsd:element name="episodeCount" type="xsd:unsignedInt"/>
+			<xsd:element name="episodeNumber" type="xsd:unsignedInt"/>
+			<xsd:element name="programCode" type="av:programCode.type"/>
+			<xsd:element name="rating" type="av:rating.type"/>
+			<xsd:element name="episodeType" type="av:FIRST-RUN.or.REPEAT"/>
+			<xsd:element name="programPreserved" type="upnp:programPreserved.Type"/>
+			<xsd:element name="preservedTimeRange" type="upnp:preservedTimeRange.Type"/>
+			<xsd:element name="programList" type="upnp:programList.Type"/>
+			<!--=============================-=============================-->
+			<!--          User Channel and EPG Related Properties          -->
+			<!--=============================-=============================-->
+			<xsd:element name="channelGroupName" type="av:channelGroupName.type"/>
+			<xsd:element name="callSign" type="av:stationCallSign.type"/>
+			<xsd:element name="networkAffiliation" type="xsd:string"/>
+			<xsd:element name="serviceProvider" type="xsd:string"/>
+			<xsd:element name="price" type="upnp:price.type"/>
+			<xsd:element name="payPerView" type="xsd:boolean"/>
+			<xsd:element name="epgProviderName" type="xsd:string"/>
+			<xsd:element name="dateTimeRange" type="upnp:qualifiedDateTime-range"/>
+			<!--=============================-=============================-->
+			<!--                 Radio Broadcast Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="radioCallSign" type="av:stationCallSign.type"/>
+			<xsd:element name="radioStationID" type="xsd:string"/>
+			<xsd:element name="radioBand" type="av:radioBand.type"/>
+			<!--=============================-=============================-->
+			<!--                 Video Broadcast Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="channelNr" type="xsd:int"/>
+			<xsd:element name="channelName" type="xsd:string"/>
+			<xsd:element name="scheduledStartTime" type="upnp:qualifiedDateTime.ISO8601"/>
+			<xsd:element name="scheduledEndTime" type="upnp:qualifiedDateTime.ISO8601"/>
+			<xsd:element name="scheduledDuration" type="av:unsignedDuration"/>
+			<!--=============================-=============================-->
+			<!--          Physical Tuner Status-related Properties         -->
+			<!--=============================-=============================-->
+			<xsd:element name="signalStrength" type="av:signalStrength.type"/>
+			<xsd:element name="signalLocked" type="xsd:boolean"/>
+			<xsd:element name="tuned" type="xsd:boolean"/>
+			<!--=============================-=============================-->
+			<!--                Bookmark Related Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="bookmarkID" type="av:didl-lite_COLON_at_id.vd.type"/>
+			<xsd:element name="bookmarkedObjectID" type="av:didl-lite_COLON_at_id.vd.type"/>
+			<xsd:element name="deviceUDN" type="av:deviceUDN.type"/>
+			<xsd:element name="stateVariableCollection" type="upnp:stateVariableCollection.type"/>
+			<!--=============================-=============================-->
+			<!--            Foreign Metadata Related Properties            -->
+			<!--=============================-=============================-->
+			<xsd:element name="foreignMetadata" type="upnp:foreignMetadata.type"/>
+			<!--=============================-=============================-->
+			<!--                 Miscellaneous Properties                  -->
+			<!--=============================-=============================-->
+			<xsd:element name="DVDRegionCode" type="xsd:int"/>
+			<xsd:element name="originalTrackNumber" type="xsd:int"/>
+			<xsd:element name="toc" type="xsd:string"/>
+			<xsd:element name="userAnnotation" type="xsd:string"/>
+			<!--=============================-=============================-->
+			<!--                 Object Tracking Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="containerUpdateID" type="xsd:unsignedInt"/>
+			<xsd:element name="objectUpdateID" type="xsd:unsignedInt"/>
+			<xsd:element name="totalDeletedChildCount" type="xsd:unsignedInt"/>
+			<xsd:element name="segmentID" type="av:didl-lite_COLON_at_id.vd.type"/>
+			<!--=============================-=============================-->
+			<!--                 Content Protection Properties                -->
+			<!--=============================-=============================-->
+			<xsd:element name="objectOwner" type="upnp:owner.Type"/>
+			<xsd:element name="inclusionControl" type="upnp:inclusion.Type"/>
+		</xsd:choice>
+	</xsd:group>
+	<xsd:group name="upnpForItem">
+		<xsd:choice>
+			<xsd:group ref="upnp:upnpForContainer"/>
+		</xsd:choice>
+	</xsd:group>
+	<!--=============================-=============================-->
+	<!--                      Base Properties                      -->
+	<!--=============================-=============================-->
+	<xsd:simpleType name="className.base.type">
+		<xsd:restriction base="xsd:NCName">
+			<xsd:minLength value="11"/>
+			<xsd:pattern value="object\.(item|container)(\.[\i-[:]][\c-[\.:]]*)*">
+				<xsd:annotation>
+					<xsd:documentation>
+						This pattern exactly matches the definition for class name syntax
+						given in CDS:2 Section C.1.1.
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:pattern>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="className.wc.type">
+		<xsd:restriction base="xsd:NCName">
+			<xsd:enumeration value="object.item"/>
+			<xsd:enumeration value="object.item.imageItem"/>
+			<xsd:enumeration value="object.item.imageItem.photo"/>
+			<xsd:enumeration value="object.item.audioItem"/>
+			<xsd:enumeration value="object.item.audioItem.musicTrack"/>
+			<xsd:enumeration value="object.item.audioItem.audioBroadcast"/>
+			<xsd:enumeration value="object.item.audioItem.audioBook"/>
+			<xsd:enumeration value="object.item.videoItem"/>
+			<xsd:enumeration value="object.item.videoItem.movie"/>
+			<xsd:enumeration value="object.item.videoItem.videoBroadcast"/>
+			<xsd:enumeration value="object.item.videoItem.musicVideoClip"/>
+			<xsd:enumeration value="object.item.playlistItem"/>
+			<xsd:enumeration value="object.item.textItem"/>
+			<xsd:enumeration value="object.item.bookmarkItem"/>
+			<xsd:enumeration value="object.item.epgItem"/>
+			<xsd:enumeration value="object.item.epgItem.audioProgram"/>
+			<xsd:enumeration value="object.item.epgItem.videoProgram"/>
+			<xsd:enumeration value="object.container.person"/>
+			<xsd:enumeration value="object.container.person.musicArtist"/>
+			<xsd:enumeration value="object.container.playlistContainer"/>
+			<xsd:enumeration value="object.container.album"/>
+			<xsd:enumeration value="object.container.album.musicAlbum"/>
+			<xsd:enumeration value="object.container.album.photoAlbum"/>
+			<xsd:enumeration value="object.container.genre"/>
+			<xsd:enumeration value="object.container.genre.musicGenre"/>
+			<xsd:enumeration value="object.container.genre.movieGenre"/>
+			<xsd:enumeration value="object.container.channelGroup"/>
+			<xsd:enumeration value="object.container.channelGroup.audioChannelGroup"/>
+			<xsd:enumeration value="object.container.channelGroup.videoChannelGroup"/>
+			<xsd:enumeration value="object.container.epgContainer"/>
+			<xsd:enumeration value="object.container.storageSystem"/>
+			<xsd:enumeration value="object.container.storageVolume"/>
+			<xsd:enumeration value="object.container.storageFolder"/>
+			<xsd:enumeration value="object.container.bookmarkFolder"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="_className.type">
+		<xsd:union memberTypes="upnp:className.wc.type upnp:className.vx.type"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="className.type">
+		<xsd:restriction base="upnp:_className.type">
+			<!-- xxx - JGR
+			<xsd:pattern value="object\.(item|container)(\.[\i-[:]][\c-[\.:]]*)*"/>
+
+			Somehow including this pattern restriction rejects the <searchClass> element
+			but not the <class> element from the following snipet taken from the
+			ForeignMetadata Example #2.  Even when the values are identical, the
+			<class> element validates and the <searchClass> element fails.
+
+			<upnp:class>object.container.storageFolder</upnp:class>
+			<upnp:searchClass includeDerived="false">
+				object.container.album.musicAlbum
+			</upnp:searchClass>
+
+		This inconsistent behavior needs to be investigated.
+-->
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:complexType name="class.type">
+		<xsd:simpleContent>
+			<xsd:extension base="upnp:className.type">
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="searchClass.type">
+		<xsd:simpleContent>
+			<xsd:extension base="upnp:class.type">
+				<xsd:attribute name="includeDerived" type="xsd:boolean" use="required"/>
+			</xsd:extension>
+			<!-- XXX - JGR: Should className.type be used rather than class.type> </-->
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="qualifiedDateTime">
+		<xsd:simpleContent>
+			<xsd:extension base="av:dateTime">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="qualifiedDateTime-range">
+		<xsd:simpleContent>
+			<xsd:extension base="av:dateTime-range">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:attributeGroup name="dateTime.attr.group">
+		<xsd:attribute name="daylightSaving" type="av:daylightSaving.type" use="optional"/>
+	</xsd:attributeGroup>
+	<xsd:simpleType name="status.type">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="WRITABLE"/>
+			<xsd:enumeration value="PROTECTED"/>
+			<xsd:enumeration value="NOT_WRITABLE"/>
+			<xsd:enumeration value="UNKNOWN"/>
+			<xsd:enumeration value="MIXED"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--               Contributor Related Properties              -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="personWithRole.type">
+		<xsd:simpleContent>
+			<xsd:extension base="upnp:person.type">
+				<xsd:attribute name="role" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:simpleType name="person.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--               Affiliation Related Properties              -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="genre.type">
+		<xsd:simpleContent>
+			<xsd:extension base="av:_title.type">
+				<xsd:attribute name="id" type="av:string.domainNamePrefixed"/>
+				<xsd:attribute name="extended" type="av:csv.1_.string.len.1_"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--              Associated Resources Properties              -->
+	<!--=============================-=============================-->
+	<!--           This section intentionally left blank           -->
+	<!--=============================-=============================-->
+	<!--                 Storage Related Properties                -->
+	<!--=============================-=============================-->
+	<!--           This section intentionally left blank           -->
+	<!--=============================-=============================-->
+	<!--               General Description Properties              -->
+	<!--                   (mainly for UI purposes)                -->
+	<!--=============================-=============================-->
+	<!--           This section intentionally left blank           -->
+	<!--=============================-=============================-->
+	<!--            Recorded Object Related Properties             -->
+	<!--=============================-=============================-->
+	<!--           This section intentionally left blank           -->
+	<!--=============================-=============================-->
+	<!--          User Channel and EPG Related Properties          -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="price.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:float">
+				<xsd:attribute name="currency" type="xsd:string" use="required"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--                 Radio Broadcast Properties                -->
+	<!--=============================-=============================-->
+	<!--=============================-=============================-->
+	<!--                 Video Broadcast Properties                -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="qualifiedDateTime.ISO8601">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="qualifiedDateTime.ISO8601andUsage">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+				<xsd:attribute name="usage" type="av:startTimeUsage"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--          Physical Tuner Status-related Properties         -->
+	<!--=============================-=============================-->
+	<!--=============================-=============================-->
+	<!--                Bookmark Related Properties                -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="stateVariableCollection.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attributeGroup ref="upnp:serviceAttrGrp"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:attributeGroup name="serviceAttrGrp">
+		<xsd:attribute name="serviceName" use="required">
+			<xsd:simpleType>
+				<xsd:restriction base="xsd:string">
+					<xsd:enumeration value="AVTransport"/>
+					<xsd:enumeration value="RenderingControl"/>
+				</xsd:restriction>
+			</xsd:simpleType>
+		</xsd:attribute>
+		<xsd:attribute name="rcsInstanceType">
+			<xsd:simpleType>
+				<xsd:restriction base="xsd:string">
+					<xsd:enumeration value="pre-mix"/>
+					<xsd:enumeration value="post-mix"/>
+				</xsd:restriction>
+			</xsd:simpleType>
+		</xsd:attribute>
+	</xsd:attributeGroup>
+	<xsd:complexType name="stateVariable.type">
+		<xsd:attribute name="variableName" type="xsd:string" use="required"/>
+		<xsd:attribute name="channel" type="xsd:string" use="optional"/>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            Foreign Metadata Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="foreignMetadata.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				WC-defined structure for the Foreign Metadata property.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:group ref="upnp:fm.elements.group"/>
+		</xsd:sequence>
+		<xsd:attributeGroup ref="upnp:fm.attributes.group"/>
+	</xsd:complexType>
+	<xsd:attributeGroup name="fm.attributes.group">
+		<xsd:attribute name="type" use="required">
+			<xsd:simpleType>
+				<xsd:restriction base="xsd:string">
+					<xsd:pattern value="[a-zA-Z0-9_.]+"/>
+				</xsd:restriction>
+			</xsd:simpleType>
+		</xsd:attribute>
+		<xsd:attributeGroup ref="upnp:fm.extensions.attributes.any"/>
+	</xsd:attributeGroup>
+	<xsd:group name="fm.elements.group">
+		<xsd:sequence>
+			<xsd:group ref="upnp:fm.elements.wc.group" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:group ref="upnp:fm.elements.vx.group" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+	</xsd:group>
+	<xsd:group name="fm.elements.vx.group">
+		<xsd:annotation>
+			<xsd:documentation>
+				Allow the Foreign Metadata tag to also hold vendor-defined elements.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+	</xsd:group>
+	<xsd:group name="fm.elements.wc.group">
+		<xsd:annotation>
+			<xsd:documentation>
+				Foreign Metadata sub-elements defined by the WC.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:element name="fmId" type="xsd:string"/>
+			<xsd:element name="fmClass" type="xsd:string"/>
+			<xsd:element name="fmProvider" type="xsd:string"/>
+			<xsd:element name="fmBody" type="upnp:fm.elements.body.type"/>
+		</xsd:choice>
+	</xsd:group>
+	<xsd:complexType name="fm.elements.body.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				Contains the actual foreign metadata.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice>
+			<xsd:element name="fmEmbeddedXML" type="upnp:fm.elements.body.embeddedXML.type"/>
+			<xsd:element name="fmEmbeddedString" type="upnp:fm.elements.body.embeddedString.type"/>
+			<xsd:element name="fmURI" type="upnp:fm.elements.body.uri.type"/>
+		</xsd:choice>
+		<xsd:attributeGroup ref="upnp:fm.attrs.bodyAttr.group"/>
+		<xsd:attributeGroup ref="upnp:fm.extensions.attributes.any"/>
+	</xsd:complexType>
+	<xsd:attributeGroup name="fm.attrs.bodyAttr.group">
+		<xsd:attribute name="xmlFlag" type="xsd:boolean" use="required"/>
+		<xsd:attribute name="mimeType">
+			<xsd:simpleType>
+				<xsd:restriction base="xsd:string">
+					<xsd:pattern value="[a-zA-Z0-9_./]+"/>
+				</xsd:restriction>
+			</xsd:simpleType>
+		</xsd:attribute>
+	</xsd:attributeGroup>
+	<xsd:complexType name="fm.elements.body.embeddedXML.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				Tags allowed inside a Foreign Metadata Body URI element.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice minOccurs="0" maxOccurs="unbounded">
+			<xsd:any namespace="##other" processContents="lax"/>
+		</xsd:choice>
+	</xsd:complexType>
+	<xsd:complexType name="fm.elements.body.embeddedString.type">
+		<xsd:annotation>
+			<xsd:documentation>
+				Tags allowed inside a Foreign Metadata Body URI element.
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attributeGroup ref="upnp:fm.extensions.attributes.any"/>
+			</xsd:extension>
+			<!-- Placeholder for future WC attributes. -->
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="fm.elements.body.uri.type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:anyURI">
+				<xsd:attributeGroup ref="upnp:fm.extensions.attributes.any"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:attributeGroup name="fm.extensions.attributes.any">
+		<xsd:attributeGroup ref="av:extensions.attributes.any"/>
+	</xsd:attributeGroup>
+	<!--===================================================================-->
+	<!--                                                                   -->
+	<!--                   Extension Component Datatypes                   -->
+	<!--                                                                   -->
+	<!--===================================================================-->
+	<xsd:simpleType name="className.vx.type">
+		<xsd:restriction base="upnp:className.base.type"/>
+	</xsd:simpleType>
+	<xsd:simpleType name="foreignMetadata.element.vx.type">
+		<xsd:restriction base="xsd:string"/>
+	</xsd:simpleType>
+	<!--=============================-=============================-->
+	<!--            ObjectLink Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="objectLink.type">
+		<xsd:choice minOccurs="0" maxOccurs="unbounded">
+			<xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+			<xsd:element name="startObject" type="xsd:boolean" minOccurs="0"/>
+			<xsd:element name="mode" maxOccurs="1">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:string">
+						<xsd:enumeration value="Playback"/>
+						<xsd:enumeration value="Step"/>
+						<xsd:enumeration value="Index"/>
+					</xsd:restriction>
+				</xsd:simpleType>
+			</xsd:element>
+			<xsd:element name="relatedInfo" minOccurs="0">
+				<xsd:complexType mixed="true">
+					<xsd:simpleContent>
+						<xsd:extension base="xsd:string">
+							<xsd:attribute name="role" use="required">
+								<xsd:simpleType>
+									<xsd:restriction base="xsd:string">
+										<xsd:pattern value="[A-Za-z0-9]+.*"/>
+									</xsd:restriction>
+								</xsd:simpleType>
+							</xsd:attribute>
+							<xsd:attribute name="roleText" type="xsd:string" use="required"/>
+						</xsd:extension>
+					</xsd:simpleContent>
+				</xsd:complexType>
+			</xsd:element>
+			<xsd:element name="startInfo" minOccurs="0">
+				<xsd:complexType>
+					<xsd:attribute name="targetGroupID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+					<xsd:attribute name="targetObjID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+				</xsd:complexType>
+			</xsd:element>
+			<xsd:element name="endAction" minOccurs="0">
+				<xsd:complexType>
+					<xsd:attribute name="action" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:string">
+								<xsd:enumeration value="Return"/>
+								<xsd:enumeration value="Branch"/>
+								<xsd:enumeration value="Stop"/>
+							</xsd:restriction>
+						</xsd:simpleType>
+					</xsd:attribute>
+					<xsd:attribute name="targetGroupID" type="av:didl-lite_COLON_at_id.vd.type" use="optional"/>
+					<xsd:attribute name="targetObjID" type="av:didl-lite_COLON_at_id.vd.type" use="optional"/>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:choice>
+		<xsd:attribute name="groupID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="headObjID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="nextObjID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="prevObjID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            ObjectLinkRef Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="objectLinkRef.type">
+		<xsd:choice minOccurs="0" maxOccurs="1">
+			<xsd:element name="title" maxOccurs="1"/>
+			<xsd:element name="startObject" type="xsd:boolean" minOccurs="0"/>
+			<xsd:element name="relatedInfo" minOccurs="0">
+				<xsd:complexType>
+					<xsd:attribute name="role" use="required">
+						<xsd:simpleType>
+							<xsd:restriction base="xsd:string">
+								<xsd:pattern value="[A-Za-z0-9]+.*"/>
+							</xsd:restriction>
+						</xsd:simpleType>
+					</xsd:attribute>
+					<xsd:attribute name="roleText" type="xsd:string" use="required"/>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:choice>
+		<xsd:attribute name="groupID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="targetGroup" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="targetObjID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="return" type="xsd:boolean" use="optional"/>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            resExt Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="resExt.type">
+		<xsd:annotation>
+			<xsd:documentation xml:lang="en">
+        Defines the permitted child elements of &lt;resExt&gt;. All children are optional and can be listed in any order in an unbounded manner.
+      </xsd:documentation>
+		</xsd:annotation>
+		<xsd:choice minOccurs="0" maxOccurs="unbounded">
+			<xsd:element name="segmentInfo" type="upnp:segmentInfo.Type"/>
+			<xsd:element name="clockSync" type="upnp:clockSync.Type"/>
+			<xsd:element name="DRMInfo" type="upnp:DRMInfo.Type"/>
+			<xsd:element name="isSyncAnchor" type="xsd:string"/>
+			<xsd:element name="componentInfo" type="upnp:componentInfo.Type"/>
+		</xsd:choice>
+		<xsd:attribute name="id" type="av:didl-lite_COLON_at_id.vd.type" use="required">
+			<xsd:annotation>
+				<xsd:documentation xml:lang="en">
+          Must be child of &lt;item&gt; or &lt;container&gt;. Value must match the res id value.
+        </xsd:documentation>
+			</xsd:annotation>
+		</xsd:attribute>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            segmentInfo Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="segmentInfo.Type">
+		<xsd:sequence>
+			<xsd:element name="timeRange">
+				<xsd:complexType>
+					<xsd:attribute name="start" type="av:duration.cds1.decFrac" use="required"/>
+					<xsd:attribute name="end" type="av:duration.cds1.decFrac" use="required"/>
+				</xsd:complexType>
+			</xsd:element>
+			<xsd:element name="byteRange" minOccurs="0">
+				<xsd:complexType>
+					<xsd:attribute name="start" type="xsd:unsignedLong" use="required"/>
+					<xsd:attribute name="end" type="xsd:unsignedLong" use="required"/>
+				</xsd:complexType>
+			</xsd:element>
+			<xsd:element name="frameRange" minOccurs="0">
+				<xsd:complexType>
+					<xsd:attribute name="start" type="xsd:unsignedLong" use="required"/>
+					<xsd:attribute name="end" type="xsd:unsignedLong" use="required"/>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:sequence>
+		<xsd:attribute name="baseObjectID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+		<xsd:attribute name="baseResID" type="av:didl-lite_COLON_at_id.vd.type" use="required"/>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            clockSync Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="clockSync.Type">
+		<xsd:attribute name="deviceClockInfoID" type="xsd:string" use="required">
+			<xsd:annotation>
+				<xsd:documentation xml:lang="en">
+          Identifies the timestamp mechanism that will be used when the associated content-binary is streamed to the network by the device. Its value MUST equal the value of the associated deviceClockInfo id in a &lt;Feature&gt; element.
+        </xsd:documentation>
+			</xsd:annotation>
+		</xsd:attribute>
+		<xsd:attribute name="supportedTimestampsID" type="xsd:string" use="required">
+			<xsd:annotation>
+				<xsd:documentation xml:lang="en">
+          Identifies the timestamp mechanism that will be used when the associated content-binary is streamed to the network by the device.  Its value MUST equal the value of the associated supportedTimestamps id in a &lt;Features&gt; element.
+        </xsd:documentation>
+			</xsd:annotation>
+		</xsd:attribute>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            DRMInfo Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="DRMInfoContent.Type">
+		<xsd:sequence>
+			<xsd:element name="foreignMetaData" type="upnp:foreignMetadata.type" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="DRMInfo.Type">
+		<xsd:sequence>
+			<xsd:element name="DRMInfo" type="upnp:DRMInfoContent.Type" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            isSynchAnchor Related Properties            -->
+	<!--=============================-=============================-->
+	<!--=============================-=============================-->
+	<!--            componentInfo Related Properties            -->
+	<!--=============================-=============================-->
+	<!--=============================-=============================-->
+	<!--       Resource Encoding Characteristics Properties        -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="upnp.res.type" mixed="true">
+		<xsd:annotation>
+			<xsd:documentation>
+				A 'res' element indentifies a resource.
+				A resource is typically some type of binary asset,
+				such as a photo, song, video, etc.
+				A 'res' element contains a URI that identifies the resource
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:anyURI">
+				<xsd:attribute name="importUri" type="xsd:anyURI"/>
+				<xsd:attribute name="protocolInfo" type="xsd:string" use="required"/>
+				<xsd:attribute name="size" type="xsd:unsignedLong"/>
+				<xsd:attribute name="duration" type="av:duration.cds1"/>
+				<xsd:attribute name="bitrate" type="xsd:unsignedInt"/>
+				<xsd:attribute name="sampleFrequency" type="xsd:unsignedInt"/>
+				<xsd:attribute name="bitsPerSample" type="xsd:unsignedInt"/>
+				<xsd:attribute name="nrAudioChannels" type="xsd:unsignedInt"/>
+				<xsd:attribute name="resolution">
+					<xsd:simpleType>
+						<xsd:restriction base="xsd:string">
+							<xsd:pattern value="[0-9]+x[0-9]+"/>
+						</xsd:restriction>
+					</xsd:simpleType>
+				</xsd:attribute>
+				<xsd:attribute name="colorDepth" type="xsd:unsignedInt"/>
+				<xsd:attribute name="tspec" type="av:string.len.0_256"/>
+				<xsd:attribute name="allowedUse" type="av:csv.1_.allowedUse"/>
+				<xsd:attribute name="validityStart" type="av:dateTime"/>
+				<xsd:attribute name="validityEnd" type="av:dateTime"/>
+				<xsd:attribute name="remainingTime" type="av:unsignedDuration"/>
+				<xsd:attribute name="usageInfo" type="xsd:string"/>
+				<xsd:attribute name="rightsInfoURI" type="xsd:anyURI"/>
+				<xsd:attribute name="contentInfoURI" type="xsd:anyURI"/>
+				<xsd:attribute name="recordQuality" type="av:csv.1_.colonDelimPairs"/>
+				<xsd:attribute name="protection" type="xsd:string"/>
+				<xsd:attributeGroup ref="upnp:dateTime.attr.group"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--transform names with extensions-->
+	<xsd:simpleType name="componentClass.Type">
+		<xsd:restriction base="xsd:string">
+			<xsd:pattern value=".*"/>
+			<xsd:pattern value="Audio"/>
+			<xsd:pattern value="Video"/>
+			<xsd:pattern value="Caption"/>
+			<xsd:pattern value="Subtitle"/>
+			<xsd:pattern value="Unknown"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<!-- content.type  -->
+	<xsd:complexType name="content.Type">
+		<xsd:sequence/>
+		<xsd:attribute name="MIMEType" type="xsd:string" use="required"/>
+		<xsd:attribute name="extendedType" type="xsd:string" use="required"/>
+	</xsd:complexType>
+	<!-- CompRes.type   -->
+	<xsd:complexType name="compRes.Type" mixed="true">
+		<xsd:sequence>
+			<!-- we can't reffer directly to didl-lite:res.type since that creates a circular reference -->
+			<xsd:element name="isSynchAnchor" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+			<xsd:element name="refUDN" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+			<xsd:element name="refObjectID" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+			<xsd:element name="refResID" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+			<xsd:element name="res" type="upnp:upnp.res.type" minOccurs="0" maxOccurs="unbounded"/>
+			<!-- <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/> -->
+		</xsd:sequence>
+	</xsd:complexType>
+	<!--Component.type -->
+	<xsd:complexType name="component.Type">
+		<xsd:all minOccurs="1">
+			<xsd:element name="componentClass" type="upnp:componentClass.Type" maxOccurs="1" minOccurs="1"/>
+			<xsd:element name="contentType" type="upnp:content.Type" minOccurs="1" maxOccurs="1"/>
+			<xsd:element name="language" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+			<xsd:element name="compRes" type="upnp:compRes.Type" minOccurs="0" maxOccurs="1"/>
+		</xsd:all>
+		<xsd:attribute name="componentID" type="xsd:string" use="required"/>
+		<xsd:attribute name="supportive" type="xsd:boolean" use="optional"/>
+		<xsd:attribute name="supportID" type="xsd:string" use="optional"/>
+	</xsd:complexType>
+	<!-- ComponentGroup.type-->
+	<xsd:complexType name="componentGroup.Type">
+		<xsd:sequence>
+			<xsd:element name="component" type="upnp:component.Type" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="groupID" type="xsd:string" use="required"/>
+		<xsd:attribute name="required" type="xsd:boolean" use="required"/>
+	</xsd:complexType>
+	<!--  ComponentInfo.type -->
+	<xsd:complexType name="componentInfo.Type">
+		<xsd:sequence>
+			<xsd:element name="componentGroup" type="upnp:componentGroup.Type" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="componentID" type="xsd:string" use="optional"/>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            programPreserved Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="programPreserved.Type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="startTime" use="required"/>
+				<xsd:attribute name="startTimeDaylightSaving"/>
+				<xsd:attribute name="endTime"/>
+				<xsd:attribute name="endTimeDaylightSaving"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            programPreserved Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="preservedTimeRange.Type">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="startTime"/>
+				<xsd:attribute name="startTimeDaylightSaving"/>
+				<xsd:attribute name="endTime"/>
+				<xsd:attribute name="endTimeDaylightSaving"/>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            programList Related Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="programList.Type">
+		<xsd:sequence>
+			<xsd:element name="program" minOccurs="0" maxOccurs="unbounded">
+				<xsd:complexType>
+					<xsd:simpleContent>
+						<xsd:extension base="xsd:string">
+							<xsd:attribute name="preserved"/>
+						</xsd:extension>
+					</xsd:simpleContent>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:sequence>
+	</xsd:complexType>
+	<!--=============================-=============================-->
+	<!--            Content Protection Feature Properties            -->
+	<!--=============================-=============================-->
+	<xsd:complexType name="owner.Type">
+		<xsd:sequence>
+			<xsd:element name="role" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="lock" type="xsd:boolean" use="required"/>
+	</xsd:complexType>
+	<xsd:complexType name="inclusion.Type">
+		<xsd:sequence>
+			<xsd:element name="role" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+	</xsd:complexType>
+</xsd:schema>
diff --git a/data/xml.xsd b/data/xml.xsd
new file mode 100644
index 0000000..3cd228d
--- /dev/null
+++ b/data/xml.xsd
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xml:lang="en">
+
+ <xs:annotation>
+  <xs:documentation>
+   See http://www.w3.org/XML/1998/namespace.html and
+   http://www.w3.org/TR/REC-xml for information about this namespace.
+
+    This schema document describes the XML namespace, in a form
+    suitable for import by other schema documents.
+
+    Note that local names in this namespace are intended to be defined
+    only by the World Wide Web Consortium or its subgroups.  The
+    following names are currently defined in this namespace and should
+    not be used with conflicting semantics by any Working Group,
+    specification, or document instance:
+
+    base (as an attribute name): denotes an attribute whose value
+         provides a URI to be used as the base for interpreting any
+         relative URIs in the scope of the element on which it
+         appears; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML Base specification.
+
+    id   (as an attribute name): denotes an attribute whose value
+         should be interpreted as if declared to be of type ID.
+         The xml:id specification is not yet a W3C Recommendation,
+         but this attribute is included here to facilitate experimentation
+         with the mechanisms it proposes.  Note that it is _not_ included
+         in the specialAttrs attribute group.
+
+    lang (as an attribute name): denotes an attribute whose value
+         is a language code for the natural language of the content of
+         any element; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML specification.
+
+    space (as an attribute name): denotes an attribute whose
+         value is a keyword indicating what whitespace processing
+         discipline is intended for the content of the element; its
+         value is inherited.  This name is reserved by virtue of its
+         definition in the XML specification.
+
+    Father (in any context at all): denotes Jon Bosak, the chair of
+         the original XML Working Group.  This name is reserved by
+         the following decision of the W3C XML Plenary and
+         XML Coordination groups:
+
+             In appreciation for his vision, leadership and dedication
+             the W3C XML Plenary on this 10th day of February, 2000
+             reserves for Jon Bosak in perpetuity the XML name
+             xml:Father
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>This schema defines attributes and an attribute group
+        suitable for use by
+        schemas wishing to allow xml:base, xml:lang, xml:space or xml:id
+        attributes on elements they define.
+
+        To enable this, such a schema must import this schema
+        for the XML namespace, e.g. as follows:
+        &lt;schema . . .&gt;
+         . . .
+         &lt;import namespace="http://www.w3.org/XML/1998/namespace";
+                    schemaLocation="http://www.w3.org/2005/08/xml.xsd"/&gt;
+
+        Subsequently, qualified reference to any of the attributes
+        or the group defined below will have the desired effect, e.g.
+
+        &lt;type . . .&gt;
+         . . .
+         &lt;attributeGroup ref="xml:specialAttrs"/&gt;
+
+         will define a type which will schema-validate an instance
+         element with any of those attributes</xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>In keeping with the XML Schema WG's standard versioning
+   policy, this schema document will persist at
+   http://www.w3.org/2005/08/xml.xsd.
+   At the date of issue it can also be found at
+   http://www.w3.org/2001/xml.xsd.
+   The schema document at that URI may however change in the future,
+   in order to remain compatible with the latest version of XML Schema
+   itself, or with the XML namespace itself.  In other words, if the XML
+   Schema or XML namespaces change, the version of this document at
+   http://www.w3.org/2001/xml.xsd will change
+   accordingly; the version at
+   http://www.w3.org/2005/08/xml.xsd will not change.
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang">
+  <xs:annotation>
+   <xs:documentation>Attempting to install the relevant ISO 2- and 3-letter
+         codes as the enumerated possible values is probably never
+         going to be a realistic possibility.  See
+         RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry
+         at http://www.iana.org/assignments/lang-tag-apps.htm for
+         further information.
+
+         The union allows for the 'un-declaration' of xml:lang with
+         the empty string.</xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+   <xs:union memberTypes="xs:language">
+    <xs:simpleType>
+     <xs:restriction base="xs:string">
+      <xs:enumeration value=""/>
+     </xs:restriction>
+    </xs:simpleType>
+   </xs:union>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="space">
+  <xs:simpleType>
+   <xs:restriction base="xs:NCName">
+    <xs:enumeration value="default"/>
+    <xs:enumeration value="preserve"/>
+   </xs:restriction>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="base" type="xs:anyURI">
+  <xs:annotation>
+   <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
+                     information about this attribute.</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="id" type="xs:ID">
+  <xs:annotation>
+   <xs:documentation>See http://www.w3.org/TR/xml-id/ for
+                     information about this attribute.</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+  <xs:attribute ref="xml:base"/>
+  <xs:attribute ref="xml:lang"/>
+  <xs:attribute ref="xml:space"/>
+ </xs:attributeGroup>
+
+</xs:schema>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]