<?xml version="1.0" encoding="iso-8859-1"?>

<!-- file: xhtml-datatypes-1.rng

     This is XHTML, a reformulation of HTML as a modular XML application.
     Copyright 1998-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
     Revision: $Id: xhtml-datatypes-1.rng,v 1.1 2010/12/12 23:24:10 smccarro Exp $

     This RelaxNG module is identified by URI:
        
        http://www.w3.org/MarkUp/RELAXNG/xhtml-datatypes-1.rng
     .................................................................... -->
<!-- Datatypes Module -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         ns="http://www.w3.org/1999/xhtml/datatypes/"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<!-- Length defined for cellpadding/cellspacing -->

<!-- nn for pixels or nn% for percentage length -->
<define name="xhtml.Length.datatype">
  <choice>
    <data type="nonNegativeInteger"/>
    <data type="token">
      <param name="pattern">\d+[%]|\d*\.\d+[%]</param>
    </data>
  </choice>
</define>

<!-- space-separated list of link types -->
<define name="xhtml.LinkTypes.datatype">
  <data type="NMTOKEN"/>
</define>

<!-- single or comma-separated list of media descriptors -->
<define name="xhtml.MediaDesc.datatype">
  <data type="string"/>
</define>

<!-- pixel, percentage, or relative -->
<define name="xhtml.MultiLength.datatype">
  <choice>
    <ref name="xhtml.Length.datatype"/>
    <data type="token">
      <param name="pattern">\d*\*</param>
    </data>
  </choice>
</define>

<!-- one or more digits (NUMBER) -->
<define name="xhtml.Number.datatype">
  <data type="nonNegativeInteger"/>
</define>

<!-- integer representing length in pixels -->
<define name="xhtml.Pixels.datatype">
  <data type="nonNegativeInteger"/>
</define>

<!-- script expression -->
<define name="xhtml.Script.datatype">
  <data type="string"/>
</define>

<!-- textual content -->
<define name="xhtml.Text.datatype">
  <data type="string"/>
</define>
    <!-- color names or RGB color expression-->
    <define name="xhtml.Color.datatype">
    <choice>
      <data type="NMTOKEN"/>
      <data type="token">
        <param name="pattern">#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?</param>
      </data>
    </choice>
  </define>

<!-- Imported Datatypes ................................ -->

<!-- a single character from [ISO10646] -->
<define name="xhtml.Character.datatype">
  <data type="string">
    <param name="length">1</param>
  </data>
</define>

<!-- a character encoding, as per [RFC2045] -->
<define name="xhtml.Charset.datatype">
  <data type="string"/>
</define>

<!-- a space separated list of character encodings, as per [RFC2045] -->
<define name="xhtml.Charsets.datatype">
  <list>
    <data type="string"/>
  </list>
</define>

<!-- media type, as per [RFC2045] -->
<define name="xhtml.ContentType.datatype">
  <data type="string"/>
</define>

<!-- comma-separated list of media types, as per [RFC2045] -->
<define name="xhtml.ContentTypes.datatype">
  <list>
    <data type="string"/>
  </list>
</define>

<!-- date and time information. ISO date format -->
<define name="xhtml.Datetime.datatype">
  <data type="dateTime"/>
</define>

<!-- formal public identifier, as per [ISO8879] -->
<define name="xhtml.FPI.datatype">
  <data type="normalizedString"/>
</define>

<!-- a window name as used in the target attribute -->
<define name="xhtml.FrameTarget.datatype">
  <choice>
    <value>_blank"</value>
    <value>_self</value>
    <value>_parent</value>
    <value>_top</value>
    <data type="string">
      <param name="pattern">[a-zA-Z].*</param>
    </data>
  </choice>
</define>

<!-- a language code, as per [RFC1766] -->
<define name="xhtml.LanguageCode.datatype">
  <data type="language"/>
</define>

<!-- a Uniform Resource Identifier, see [URI] -->
<define name="xhtml.URI.datatype">
  <data type="anyURI"/>
</define>

<!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
<define name="xhtml.URIs.datatype">
  <list>
    <data type="anyURI"/>
  </list>
</define>

<!-- a relative URI reference to a fragment ID -->
<define name="xhtml.URIREF.datatype">
    <data type='string'>
      <param name='pattern'>#\c*</param>
      <param name='minLength'>1</param>
    </data>
</define>

<!-- place holders for RDFa -->

<define name="xhtml.CURIE.datatype">
  <data type="string">
    <param name='pattern'>(([\i-[:]][\c-[:]]*)?:)?.*</param>
    <param name='minLength'>0</param>
  </data>
</define>

<define name="xhtml.CURIEs.datatype">
  <list>
	  <data type="string">
		<param name='pattern'>(([\i-[:]][\c-[:]]*)?:)?.*</param>
		<param name='minLength'>0</param>
	  </data>
  </list>
</define>

<define name="xhtml.SafeCURIE.datatype">
  <data type="string">
    <param name="pattern">\[(([\i-[:]][\c-[:]]*)?:)?.*\]</param>
    <param name="minLength">2</param>
  </data>
</define>

<define name="xhtml.SafeCURIEs.datatype">
  <list>
    <oneOrMore>
      <ref name="xhtml.SafeCURIE.datatype"/>
    </oneOrMore>
  </list>
</define>

<define name="xhtml.URIorSafeCURIE.datatype">
  <choice>
    <ref name='xhtml.URI.datatype'/>
    <ref name='xhtml.SafeCURIE.datatype'/>
  </choice>
</define>

<define name="xhtml.URIorSafeCURIEs.datatype">
  <list>
    <oneOrMore>
      <ref name="xhtml.URIorSafeCURIE.datatype"/>
    </oneOrMore>
  </list>
</define>

</grammar>

