<?xml version="1.0" encoding="UTF-8"?> <!-- ================================================================== Relax NG Schema for XSPF Version 1 $Id$ This schema was written as a service for developers who want to validate the playlists generated by their applications. Nobody claims it is perfect, so if you find bugs please report them. In any case, the spec overrides this schema. Further information about XSPF is available at http://www.xspf.org Copyright (c) 2005 Matthias Friedrich <matt@mafr.de> Copyright (c) 2007-2008 Sebastian Pipping <webmaster@hartwork.org> The schema is released under the Creative Commons Attribution-ShareAlike 2.5 license. http://creativecommons.org/licenses/by-sa/2.5/ ChangeLog: * 2008-09-03: Allow xml:base attribute everywhere Extract common elements Sebastian Pipping <webmaster@hartwork.org> * 2008-07-26: Support for xml:base attribute Sebastian Pipping <webmaster@hartwork.org> * 2007-02-16: Trang-friendly transformation of def_anything Sebastian Pipping <webmaster@hartwork.org> * 2007-02-16: Interleave wrap for track and playlist to allow arbitrary element order Sebastian Pipping <webmaster@hartwork.org> * 2007-01-07: The info element's content has been changed from type "text" to "anyURI", as per spec. Matthias Friedrich <matt@mafr.de> * 2006-09-25: Fixed an error: the "attribution" element now allows "identifier" child element elements, too. Matthias Friedrich <matt@mafr.de> ================================================================== --> <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://xspf.org/ns/0/"> <start> <ref name="def_playlist-element"/> </start> <define name="xml_base-attribute"> <optional> <attribute name="xml:base"> <data type="anyURI"/> </attribute> </optional> </define> <define name="def_title-element"> <element name="title"> <ref name="xml_base-attribute"/> <text/> </element> </define> <define name="def_creator-element"> <element name="creator"> <ref name="xml_base-attribute"/> <text/> </element> </define> <define name="def_annotation-element"> <element name="annotation"> <ref name="xml_base-attribute"/> <text/> </element> </define> <define name="def_info-element"> <element name="info"> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </define> <define name="def_location-element"> <element name="location"> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </define> <define name="def_identifier-element"> <element name="identifier"> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </define> <define name="def_image-element"> <element name="image"> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </define> <define name="def_link-element"> <element name="link"> <attribute name="rel"> <data type="anyURI"/> </attribute> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </define> <define name="def_meta-element"> <element name="meta"> <attribute name="rel"> <data type="anyURI"/> </attribute> <ref name="xml_base-attribute"/> <text /> </element> </define> <define name="def_extension-element"> <element name="extension"> <attribute name="application"> <data type="anyURI"/> </attribute> <ref name="xml_base-attribute"/> <zeroOrMore> <choice> <element> <anyName/> <ref name="def_anything"/> </element> <text/> </choice> </zeroOrMore> </element> </define> <define name="def_playlist-element"> <element name="playlist"> <attribute name="version"> <data type="string"> <param name="pattern">1</param> </data> </attribute> <ref name="xml_base-attribute"/> <interleave> <optional> <ref name="def_title-element"/> </optional> <optional> <ref name="def_creator-element"/> </optional> <optional> <ref name="def_annotation-element"/> </optional> <optional> <ref name="def_info-element"/> </optional> <optional> <ref name="def_location-element"/> </optional> <optional> <ref name="def_identifier-element"/> </optional> <optional> <ref name="def_image-element"/> </optional> <optional> <element name="date"> <ref name="xml_base-attribute"/> <data type="dateTime"/> </element> </optional> <optional> <element name="license"> <ref name="xml_base-attribute"/> <data type="anyURI"/> </element> </optional> <optional> <ref name="def_attribution-element"/> </optional> <zeroOrMore> <ref name="def_link-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_meta-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_extension-element"/> </zeroOrMore> <element name="trackList"> <ref name="xml_base-attribute"/> <zeroOrMore> <ref name="def_track-element"/> </zeroOrMore> </element> </interleave> </element> </define> <define name="def_attribution-element"> <element name="attribution"> <ref name="xml_base-attribute"/> <zeroOrMore> <choice> <ref name="def_identifier-element"/> <ref name="def_location-element"/> </choice> </zeroOrMore> </element> </define> <define name="def_anything"> <interleave> <zeroOrMore> <element> <anyName/> <ref name="def_anything"/> </element> </zeroOrMore> <zeroOrMore> <attribute> <anyName/> </attribute> </zeroOrMore> <zeroOrMore> <text/> </zeroOrMore> </interleave> </define> <define name="def_track-element"> <element name="track"> <ref name="xml_base-attribute"/> <interleave> <zeroOrMore> <ref name="def_location-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_identifier-element"/> </zeroOrMore> <optional> <ref name="def_title-element"/> </optional> <optional> <ref name="def_creator-element"/> </optional> <optional> <ref name="def_annotation-element"/> </optional> <optional> <ref name="def_info-element"/> </optional> <optional> <ref name="def_image-element"/> </optional> <optional> <element name="album"> <ref name="xml_base-attribute"/> <text/> </element> </optional> <optional> <element name="trackNum"> <ref name="xml_base-attribute"/> <data type="nonNegativeInteger"/> </element> </optional> <optional> <element name="duration"> <ref name="xml_base-attribute"/> <data type="nonNegativeInteger"/> </element> </optional> <zeroOrMore> <ref name="def_link-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_meta-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_extension-element"/> </zeroOrMore> </interleave> </element> </define> </grammar>