<?xml version="1.0" encoding="UTF-8"?> <!-- ================================================================== Relax NG Schema for XSPF Version 0 $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> The schema is released under the Creative Commons Attribution-ShareAlike 2.5 license. http://creativecommons.org/licenses/by-sa/2.5/ ChangeLog: * 2008-07-26: Support for xml:base attribute Sebastian Pipping <webmaster@hartwork.org> * 2007-05-02: XSPF-0 schema extracted from XSPF-1 edition 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="def_playlist-element"> <element name="playlist"> <attribute name="version"> <data type="string"> <param name="pattern">0</param> </data> </attribute> <optional> <attribute name="xml:base"> <data type="anyURI"/> </attribute> </optional> <interleave> <optional> <element name="title"> <text/> </element> </optional> <optional> <element name="creator"> <text/> </element> </optional> <optional> <element name="annotation"> <text/> </element> </optional> <optional> <element name="info"> <data type="anyURI"/> </element> </optional> <optional> <element name="location"> <data type="anyURI"/> </element> </optional> <optional> <element name="identifier"> <data type="anyURI"/> </element> </optional> <optional> <element name="image"> <data type="anyURI"/> </element> </optional> <optional> <element name="date"> <data type="dateTime"/> </element> </optional> <optional> <element name="license"> <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> <element name="trackList"> <ref name="def_track-element"/> <zeroOrMore> <ref name="def_track-element"/> </zeroOrMore> </element> </interleave> </element> </define> <define name="def_attribution-element"> <element name="attribution"> <zeroOrMore> <choice> <element name="identifier"> <data type="anyURI"/> </element> <element name="location"> <data type="anyURI"/> </element> </choice> </zeroOrMore> </element> </define> <define name="def_link-element"> <element name="link"> <attribute name="rel"> <data type="anyURI"/> </attribute> <data type="anyURI"/> </element> </define> <define name="def_meta-element"> <element name="meta"> <attribute name="rel"> <data type="anyURI"/> </attribute> <text /> </element> </define> <define name="def_track-element"> <element name="track"> <interleave> <zeroOrMore> <element name="location"> <data type="anyURI"/> </element> </zeroOrMore> <zeroOrMore> <element name="identifier"> <data type="anyURI"/> </element> </zeroOrMore> <optional> <element name="title"> <text/> </element> </optional> <optional> <element name="creator"> <text/> </element> </optional> <optional> <element name="annotation"> <text/> </element> </optional> <optional> <element name="info"> <data type="anyURI"/> </element> </optional> <optional> <element name="image"> <data type="anyURI"/> </element> </optional> <optional> <element name="album"> <text/> </element> </optional> <optional> <element name="trackNum"> <data type="nonNegativeInteger"/> </element> </optional> <optional> <element name="duration"> <data type="nonNegativeInteger"/> </element> </optional> <zeroOrMore> <ref name="def_link-element"/> </zeroOrMore> <zeroOrMore> <ref name="def_meta-element"/> </zeroOrMore> </interleave> </element> </define> </grammar>