Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?xml version="1.0" encoding="UTF-8"?><!---*- rnc -*-RELAX NG Compact Syntax Grammar for theAtom Format Specification Version 11--><grammar ns="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:s="http://www.ascc.net/xml/schematron" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"><start><choice><ref name="atomFeed"/><ref name="atomEntry"/></choice></start><!-- Common attributes --><define name="atomCommonAttributes"><optional><attribute name="xml:base"><ref name="atomUri"/></attribute></optional><optional><attribute name="xml:lang"><ref name="atomLanguageTag"/></attribute></optional><zeroOrMore><ref name="undefinedAttribute"/></zeroOrMore></define><!-- Text Constructs --><define name="atomPlainTextConstruct"><ref name="atomCommonAttributes"/><optional><attribute name="type"><choice><value>text</value><value>html</value></choice></attribute></optional><text/></define><define name="atomXHTMLTextConstruct"><ref name="atomCommonAttributes"/><attribute name="type"><value>xhtml</value></attribute><ref name="xhtmlDiv"/></define><define name="atomTextConstruct"><choice><ref name="atomPlainTextConstruct"/><ref name="atomXHTMLTextConstruct"/></choice></define><!-- Person Construct --><define name="atomPersonConstruct"><ref name="atomCommonAttributes"/><interleave><element name="atom:name"><text/></element><optional><element name="atom:uri"><ref name="atomUri"/></element></optional><optional><element name="atom:email"><ref name="atomEmailAddress"/></element></optional><zeroOrMore><ref name="extensionElement"/></zeroOrMore></interleave></define><!-- Date Construct --><define name="atomDateConstruct"><ref name="atomCommonAttributes"/><data type="dateTime"/></define><!-- atom:feed --><define name="atomFeed"><element name="atom:feed"><s:rule context="atom:feed"><s:assert test="atom:author or not(atom:entry[not(atom:author)])">An atom:feed must have an atom:author unless all of its atom:entry children have an atom:author.</s:assert></s:rule><ref name="atomCommonAttributes"/><interleave><zeroOrMore><ref name="atomAuthor"/></zeroOrMore><zeroOrMore><ref name="atomCategory"/></zeroOrMore><zeroOrMore><ref name="atomContributor"/></zeroOrMore><optional><ref name="atomGenerator"/></optional><optional><ref name="atomIcon"/></optional><ref name="atomId"/><zeroOrMore><ref name="atomLink"/></zeroOrMore><optional><ref name="atomLogo"/></optional><optional><ref name="atomRights"/></optional><optional><ref name="atomSubtitle"/></optional><ref name="atomTitle"/><ref name="atomUpdated"/><zeroOrMore><ref name="extensionElement"/></zeroOrMore></interleave><zeroOrMore><ref name="atomEntry"/></zeroOrMore></element></define><!-- atom:entry --><define name="atomEntry"><element name="atom:entry"><s:rule context="atom:entry"><s:assert test="atom:link[@rel='alternate'] or atom:link[not(@rel)] or atom:content">An atom:entry must have at least one atom:link element with a rel attribute of 'alternate' or an atom:content.</s:assert></s:rule><s:rule context="atom:entry"><s:assert test="atom:author or ../atom:author or atom:source/atom:author">An atom:entry must have an atom:author if its feed does not.</s:assert></s:rule><ref name="atomCommonAttributes"/><interleave><zeroOrMore><ref name="atomAuthor"/></zeroOrMore><zeroOrMore><ref name="atomCategory"/></zeroOrMore><optional><ref name="atomContent"/></optional><zeroOrMore><ref name="atomContributor"/></zeroOrMore><ref name="atomId"/><zeroOrMore><ref name="atomLink"/></zeroOrMore><optional><ref name="atomPublished"/></optional><optional><ref name="atomRights"/></optional><optional><ref name="atomSource"/></optional><optional><ref name="atomSummary"/></optional><ref name="atomTitle"/><ref name="atomUpdated"/><zeroOrMore><ref name="extensionElement"/></zeroOrMore></interleave></element></define><!-- atom:content --><define name="atomInlineTextContent"><element name="atom:content"><ref name="atomCommonAttributes"/><optional><attribute name="type"><choice><value>text</value><value>html</value></choice></attribute></optional><zeroOrMore><text/></zeroOrMore></element></define><define name="atomInlineXHTMLContent"><element name="atom:content"><ref name="atomCommonAttributes"/><attribute name="type"><value>xhtml</value></attribute><ref name="xhtmlDiv"/></element></define><define name="atomInlineOtherContent"><element name="atom:content"><ref name="atomCommonAttributes"/><optional><attribute name="type"><ref name="atomMediaType"/></attribute></optional><zeroOrMore><choice><text/><ref name="anyElement"/></choice></zeroOrMore></element></define><define name="atomOutOfLineContent"><element name="atom:content"><ref name="atomCommonAttributes"/><optional><attribute name="type"><ref name="atomMediaType"/></attribute></optional><attribute name="src"><ref name="atomUri"/></attribute><empty/></element></define><define name="atomContent"><choice><ref name="atomInlineTextContent"/><ref name="atomInlineXHTMLContent"/><ref name="atomInlineOtherContent"/><ref name="atomOutOfLineContent"/></choice></define><!-- atom:author --><define name="atomAuthor"><element name="atom:author"><ref name="atomPersonConstruct"/></element></define><!-- atom:category --><define name="atomCategory"><element name="atom:category"><ref name="atomCommonAttributes"/><attribute name="term"/><optional><attribute name="scheme"><ref name="atomUri"/></attribute></optional><optional><attribute name="label"/></optional><ref name="undefinedContent"/></element></define><!-- atom:contributor --><define name="atomContributor"><element name="atom:contributor"><ref name="atomPersonConstruct"/></element></define><!-- atom:generator --><define name="atomGenerator"><element name="atom:generator"><ref name="atomCommonAttributes"/><optional><attribute name="uri"><ref name="atomUri"/></attribute></optional><optional><attribute name="version"/></optional><text/></element></define><!-- atom:icon --><define name="atomIcon"><element name="atom:icon"><ref name="atomCommonAttributes"/><ref name="atomUri"/></element></define><!-- atom:id --><define name="atomId"><element name="atom:id"><ref name="atomCommonAttributes"/><ref name="atomUri"/></element></define><!-- atom:logo --><define name="atomLogo"><element name="atom:logo"><ref name="atomCommonAttributes"/><ref name="atomUri"/></element></define><!-- atom:link --><define name="atomLink"><element name="atom:link"><ref name="atomCommonAttributes"/><attribute name="href"><ref name="atomUri"/></attribute><optional><attribute name="rel"><choice><ref name="atomNCName"/><ref name="atomUri"/></choice></attribute></optional><optional><attribute name="type"><ref name="atomMediaType"/></attribute></optional><optional><attribute name="hreflang"><ref name="atomLanguageTag"/></attribute></optional><optional><attribute name="title"/></optional><optional><attribute name="length"/></optional><ref name="undefinedContent"/></element></define><!-- atom:published --><define name="atomPublished"><element name="atom:published"><ref name="atomDateConstruct"/></element></define><!-- atom:rights --><define name="atomRights"><element name="atom:rights"><ref name="atomTextConstruct"/></element></define><!-- atom:source --><define name="atomSource"><element name="atom:source"><ref name="atomCommonAttributes"/><interleave><zeroOrMore><ref name="atomAuthor"/></zeroOrMore><zeroOrMore><ref name="atomCategory"/></zeroOrMore><zeroOrMore><ref name="atomContributor"/></zeroOrMore><optional><ref name="atomGenerator"/></optional><optional><ref name="atomIcon"/></optional><optional><ref name="atomId"/></optional><zeroOrMore><ref name="atomLink"/></zeroOrMore><optional><ref name="atomLogo"/></optional><optional><ref name="atomRights"/></optional><optional><ref name="atomSubtitle"/></optional><optional><ref name="atomTitle"/></optional><optional><ref name="atomUpdated"/></optional><zeroOrMore><ref name="extensionElement"/></zeroOrMore></interleave></element></define><!-- atom:subtitle --><define name="atomSubtitle"><element name="atom:subtitle"><ref name="atomTextConstruct"/></element></define><!-- atom:summary --><define name="atomSummary"><element name="atom:summary"><ref name="atomTextConstruct"/></element></define><!-- atom:title --><define name="atomTitle"><element name="atom:title"><ref name="atomTextConstruct"/></element></define><!-- atom:updated --><define name="atomUpdated"><element name="atom:updated"><ref name="atomDateConstruct"/></element></define><!-- Low-level simple types --><define name="atomNCName"><data type="string"><param name="minLength">1</param><param name="pattern">[^:]*</param></data></define><!-- Whatever a media type is, it contains at least one slash --><define name="atomMediaType"><data type="string"><param name="pattern">.+/.+</param></data></define><!-- As defined in RFC 3066 --><define name="atomLanguageTag"><data type="string"><param name="pattern">[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*</param></data></define><!--Unconstrained; it's not entirely clear how IRI fit intoxsd:anyURI so let's not try to constrain it here--><define name="atomUri"><text/></define><!-- Whatever an email address is, it contains at least one @ --><define name="atomEmailAddress"><data type="string"><param name="pattern">.+@.+</param></data></define><!-- Simple Extension --><define name="simpleExtensionElement"><element><anyName><except><nsName ns="http://www.w3.org/2005/Atom"/></except></anyName><text/></element></define><!-- Structured Extension --><define name="structuredExtensionElement"><element><anyName><except><nsName ns="http://www.w3.org/2005/Atom"/></except></anyName><choice><group><oneOrMore><attribute><anyName/></attribute></oneOrMore><zeroOrMore><choice><text/><ref name="anyElement"/></choice></zeroOrMore></group><group><zeroOrMore><attribute><anyName/></attribute></zeroOrMore><group><optional><text/></optional><oneOrMore><ref name="anyElement"/></oneOrMore><zeroOrMore><choice><text/><ref name="anyElement"/></choice></zeroOrMore></group></group></choice></element></define><!-- Other Extensibility --><define name="extensionElement"><choice><ref name="simpleExtensionElement"/><ref name="structuredExtensionElement"/></choice></define><define name="undefinedAttribute"><attribute><anyName><except><name>xml:base</name><name>xml:lang</name><nsName ns=""/></except></anyName></attribute></define><define name="undefinedContent"><zeroOrMore><choice><text/><ref name="anyForeignElement"/></choice></zeroOrMore></define><define name="anyElement"><element><anyName/><zeroOrMore><choice><attribute><anyName/></attribute><text/><ref name="anyElement"/></choice></zeroOrMore></element></define><define name="anyForeignElement"><element><anyName><except><nsName ns="http://www.w3.org/2005/Atom"/></except></anyName><zeroOrMore><choice><attribute><anyName/></attribute><text/><ref name="anyElement"/></choice></zeroOrMore></element></define><!-- XHTML --><define name="anyXHTML"><element><nsName/><zeroOrMore><choice><attribute><anyName/></attribute><text/><ref name="anyXHTML"/></choice></zeroOrMore></element></define><define name="xhtmlDiv"><element name="xhtml:div"><zeroOrMore><choice><attribute><anyName/></attribute><text/><ref name="anyXHTML"/></choice></zeroOrMore></element></define></grammar><!-- EOF -->