Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

initial commit

  • Loading branch information...
commit 8d30c3c4ae7158b021225a362c5e0b3eb1a1e070 0 parents
@tenderlove authored
23 .autotest
@@ -0,0 +1,23 @@
+# -*- ruby -*-
+
+require 'autotest/restart'
+
+# Autotest.add_hook :initialize do |at|
+# at.extra_files << "../some/external/dependency.rb"
+#
+# at.libs << ":../some/external"
+#
+# at.add_exception 'vendor'
+#
+# at.add_mapping(/dependency.rb/) do |f, _|
+# at.files_matching(/test_.*rb$/)
+# end
+#
+# %w(TestA TestB).each do |klass|
+# at.extra_class_map[klass] = "test/test_misc.rb"
+# end
+# end
+
+# Autotest.add_hook :run_command do |at|
+# system "rake build"
+# end
6 History.txt
@@ -0,0 +1,6 @@
+=== 1.0.0 / 2009-06-11
+
+* 1 major enhancement
+
+ * Birthday!
+
9 Manifest.txt
@@ -0,0 +1,9 @@
+.autotest
+History.txt
+Manifest.txt
+README.txt
+Rakefile
+lib/markup_validity.rb
+lib/xhtml1-transitional.xsd
+lib/xml.xsd
+test/test_markup_validity.rb
48 README.txt
@@ -0,0 +1,48 @@
+= markup_validity
+
+* FIX (url)
+
+== DESCRIPTION:
+
+FIX (describe your package)
+
+== FEATURES/PROBLEMS:
+
+* FIX (list of features or problems)
+
+== SYNOPSIS:
+
+ FIX (code sample of usage)
+
+== REQUIREMENTS:
+
+* FIX (list of requirements)
+
+== INSTALL:
+
+* FIX (sudo gem install, anything else)
+
+== LICENSE:
+
+(The MIT License)
+
+Copyright (c) 2009 FIX
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 Rakefile
@@ -0,0 +1,15 @@
+# -*- ruby -*-
+
+require 'rubygems'
+require 'hoe'
+
+$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
+
+require 'markup_validity'
+
+Hoe.new('markup_validity', MarkupValidity::VERSION) do |p|
+ p.developer('Aaron Patterson', 'aaronp@rubyforge.org')
+ p.extra_deps = [['nokogiri', '>= 1.3.1']]
+end
+
+# vim: syntax=Ruby
30 lib/markup_validity.rb
@@ -0,0 +1,30 @@
+require 'nokogiri'
+
+module MarkupValidity
+ VERSION = '1.0.0'
+
+ Dir.chdir(File.dirname(__FILE__)) do
+ XHTML1_TRANSITIONAL = Nokogiri::XML::Schema(
+ File.read('xhtml1-transitional.xsd')
+ )
+ end
+
+ def assert_xhtml_transitional xhtml
+ lines = xhtml.split("\n")
+ doc = Nokogiri::XML xhtml
+
+ errors = XHTML1_TRANSITIONAL.validate(doc)
+
+ strings = []
+ errors.each do |error|
+ strings << "Error on line: #{error.line - 1}:"
+ strings << error.message.gsub(/\{[^\}]*\}/, '')
+ Range.new(error.line - 2, error.line + 2).each { |number|
+ strings << "#{number}: #{lines[number]}"
+ }
+ strings << ""
+ end
+
+ assert_equal 0, errors.length, strings.join("\n")
+ end
+end
2,755 lib/xhtml1-transitional.xsd
@@ -0,0 +1,2755 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema version="1.0" xml:lang="en"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.w3.org/1999/xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ elementFormDefault="qualified">
+
+ <xs:annotation>
+ <xs:documentation>
+ XHTML 1.0 (Second Edition) Transitional in XML Schema
+
+ This is the same as HTML 4 Transitional except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ The DTD version is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+ $Id: xhtml1-transitional.xsd,v 1.5 2002/08/28 09:53:29 mimasa Exp $
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="xml.xsd"/>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Character mnemonic entities =========================
+
+ XHTML entity sets are identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
+
+ PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
+
+ PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Imported Names ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ContentType">
+ <xs:annotation>
+ <xs:documentation>
+ media type, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="ContentTypes">
+ <xs:annotation>
+ <xs:documentation>
+ comma-separated list of media types, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charset">
+ <xs:annotation>
+ <xs:documentation>
+ a character encoding, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charsets">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of character encodings, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="LanguageCode">
+ <xs:annotation>
+ <xs:documentation>
+ a language code, as per [RFC3066]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:language"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Character">
+ <xs:annotation>
+ <xs:documentation>
+ a single character, as per section 2.2 of [XML]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:length value="1" fixed="true"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Number">
+ <xs:annotation>
+ <xs:documentation>
+ one or more digits
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:pattern value="[0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="tabindexNumber">
+ <xs:annotation>
+ <xs:documentation>
+ tabindex attribute specifies the position of the current element
+ in the tabbing order for the current document. This value must be
+ a number between 0 and 32767. User agents should ignore leading zeros.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="Number">
+ <xs:minInclusive value="0"/>
+ <xs:maxInclusive value="32767"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="LinkTypes">
+ <xs:annotation>
+ <xs:documentation>
+ space-separated list of link types
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:NMTOKENS"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="MediaDesc">
+ <xs:annotation>
+ <xs:documentation>
+ single or comma-separated list of media descriptors
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="URI">
+ <xs:annotation>
+ <xs:documentation>
+ a Uniform Resource Identifier, see [RFC2396]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:anyURI"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="UriList">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of Uniform Resource Identifiers
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Datetime">
+ <xs:annotation>
+ <xs:documentation>
+ date and time information. ISO date format
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:dateTime"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Script">
+ <xs:annotation>
+ <xs:documentation>
+ script expression
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="StyleSheet">
+ <xs:annotation>
+ <xs:documentation>
+ style sheet data
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Text">
+ <xs:annotation>
+ <xs:documentation>
+ used for titles etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="FrameTarget">
+ <xs:annotation>
+ <xs:documentation>
+ render in this frame
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern value="_(blank|self|parent|top)|[A-Za-z]\c*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Length">
+ <xs:annotation>
+ <xs:documentation>
+ nn for pixels or nn% for percentage length
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="MultiLength">
+ <xs:annotation>
+ <xs:documentation>
+ pixel, percentage, or relative
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Pixels">
+ <xs:annotation>
+ <xs:documentation>
+ integer representing length in pixels
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger"/>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ these are used for image maps
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="Shape">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="rect"/>
+ <xs:enumeration value="circle"/>
+ <xs:enumeration value="poly"/>
+ <xs:enumeration value="default"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Coords">
+ <xs:annotation>
+ <xs:documentation>
+ comma separated list of lengths
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="ImgAlign">
+ <xs:annotation>
+ <xs:documentation>
+ used for object, applet, img, input and iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="middle"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Color">
+ <xs:annotation>
+ <xs:documentation>
+ a color using sRGB: #RRGGBB as Hex values
+
+ There are also 16 widely known color names with their sRGB values:
+
+ Black = #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080 Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Za-z]+|#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Generic Attributes ===============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attributeGroup name="coreattrs">
+ <xs:annotation>
+ <xs:documentation>
+ core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="class" type="xs:NMTOKENS"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="i18n">
+ <xs:annotation>
+ <xs:documentation>
+ internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="events">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="onclick" type="Script"/>
+ <xs:attribute name="ondblclick" type="Script"/>
+ <xs:attribute name="onmousedown" type="Script"/>
+ <xs:attribute name="onmouseup" type="Script"/>
+ <xs:attribute name="onmouseover" type="Script"/>
+ <xs:attribute name="onmousemove" type="Script"/>
+ <xs:attribute name="onmouseout" type="Script"/>
+ <xs:attribute name="onkeypress" type="Script"/>
+ <xs:attribute name="onkeydown" type="Script"/>
+ <xs:attribute name="onkeyup" type="Script"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="focus">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attrs">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attributeGroup ref="events"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="TextAlign">
+ <xs:annotation>
+ <xs:documentation>
+ text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="justify"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text Elements ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="special.extra">
+ <xs:choice>
+ <xs:element ref="object"/>
+ <xs:element ref="applet"/>
+ <xs:element ref="img"/>
+ <xs:element ref="map"/>
+ <xs:element ref="iframe"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special.basic">
+ <xs:choice>
+ <xs:element ref="br"/>
+ <xs:element ref="span"/>
+ <xs:element ref="bdo"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special">
+ <xs:choice>
+ <xs:group ref="special.basic"/>
+ <xs:group ref="special.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.extra">
+ <xs:choice>
+ <xs:element ref="big"/>
+ <xs:element ref="small"/>
+ <xs:element ref="font"/>
+ <xs:element ref="basefont"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.basic">
+ <xs:choice>
+ <xs:element ref="tt"/>
+ <xs:element ref="i"/>
+ <xs:element ref="b"/>
+ <xs:element ref="u"/>
+ <xs:element ref="s"/>
+ <xs:element ref="strike"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle">
+ <xs:choice>
+ <xs:group ref="fontstyle.basic"/>
+ <xs:group ref="fontstyle.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.extra">
+ <xs:choice>
+ <xs:element ref="sub"/>
+ <xs:element ref="sup"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.basic">
+ <xs:choice>
+ <xs:element ref="em"/>
+ <xs:element ref="strong"/>
+ <xs:element ref="dfn"/>
+ <xs:element ref="code"/>
+ <xs:element ref="q"/>
+ <xs:element ref="samp"/>
+ <xs:element ref="kbd"/>
+ <xs:element ref="var"/>
+ <xs:element ref="cite"/>
+ <xs:element ref="abbr"/>
+ <xs:element ref="acronym"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase">
+ <xs:choice>
+ <xs:group ref="phrase.basic"/>
+ <xs:group ref="phrase.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline.forms">
+ <xs:choice>
+ <xs:element ref="input"/>
+ <xs:element ref="select"/>
+ <xs:element ref="textarea"/>
+ <xs:element ref="label"/>
+ <xs:element ref="button"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc.inline">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:element ref="ins"/>
+ <xs:element ref="del"/>
+ <xs:element ref="script"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:element ref="noscript"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline">
+ <xs:choice>
+ <xs:element ref="a"/>
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Inline" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Inline" covers inline or "text-level" element
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Block level elements ==============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="heading">
+ <xs:choice>
+ <xs:element ref="h1"/>
+ <xs:element ref="h2"/>
+ <xs:element ref="h3"/>
+ <xs:element ref="h4"/>
+ <xs:element ref="h5"/>
+ <xs:element ref="h6"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="lists">
+ <xs:choice>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ <xs:element ref="menu"/>
+ <xs:element ref="dir"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="blocktext">
+ <xs:choice>
+ <xs:element ref="pre"/>
+ <xs:element ref="hr"/>
+ <xs:element ref="blockquote"/>
+ <xs:element ref="address"/>
+ <xs:element ref="center"/>
+ <xs:element ref="noframes"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="block">
+ <xs:choice>
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="isindex"/>
+ <xs:element ref="fieldset"/>
+ <xs:element ref="table"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Flow" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Flow" mixes block and inline and is used for list items etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Content models for exclusions =====================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType name="a.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ a elements use "Inline" excluding a
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="pre.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ pre uses "Inline" excluding img, object, applet, big, small,
+ font, or basefont
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="a"/>
+ <xs:group ref="special.basic"/>
+ <xs:group ref="fontstyle.basic"/>
+ <xs:group ref="phrase.basic"/>
+ <xs:group ref="inline.forms"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="form.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ form uses "Flow" excluding form
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="button.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ button uses "Flow" but excludes a, form, form controls, iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="table"/>
+ <xs:element ref="br"/>
+ <xs:element ref="span"/>
+ <xs:element ref="bdo"/>
+ <xs:element ref="object"/>
+ <xs:element ref="applet"/>
+ <xs:element ref="img"/>
+ <xs:element ref="map"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Structure ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="html">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="head"/>
+ <xs:element ref="body"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Head =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="head.misc">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="script"/>
+ <xs:element ref="style"/>
+ <xs:element ref="meta"/>
+ <xs:element ref="link"/>
+ <xs:element ref="object"/>
+ <xs:element ref="isindex"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:element name="head">
+ <xs:annotation>
+ <xs:documentation>
+ content model is "head.misc" combined with a single
+ title and an optional base element in any order
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:group ref="head.misc"/>
+ <xs:choice>
+ <xs:sequence>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:sequence>
+ <xs:sequence>
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="profile" type="URI"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="title">
+ <xs:annotation>
+ <xs:documentation>
+ The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="base">
+ <xs:annotation>
+ <xs:documentation>
+ document base URI
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="meta">
+ <xs:annotation>
+ <xs:documentation>
+ generic metainformation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="http-equiv"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="content" use="required"/>
+ <xs:attribute name="scheme"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="link">
+ <xs:annotation>
+ <xs:documentation>
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="style">
+ <xs:annotation>
+ <xs:documentation>
+ style info, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ <xs:attribute name="title" type="Text"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="script">
+ <xs:annotation>
+ <xs:documentation>
+ script statements, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="language"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="defer">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="defer"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noscript">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non script-based rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Frames =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="iframe">
+ <xs:annotation>
+ <xs:documentation>
+ inline subwindow
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="longdesc" type="URI"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="frameborder" default="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="1"/>
+ <xs:enumeration value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="marginwidth" type="Pixels"/>
+ <xs:attribute name="marginheight" type="Pixels"/>
+ <xs:attribute name="scrolling" default="auto">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ <xs:enumeration value="auto"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noframes">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non frame-based rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Document Body ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="body">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="onload" type="Script"/>
+ <xs:attribute name="onunload" type="Script"/>
+ <xs:attribute name="background" type="URI"/>
+ <xs:attribute name="bgcolor" type="Color"/>
+ <xs:attribute name="text" type="Color"/>
+ <xs:attribute name="link" type="Color"/>
+ <xs:attribute name="vlink" type="Color"/>
+ <xs:attribute name="alink" type="Color"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="div">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Paragraphs =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="p">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Headings =========================================
+
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="h1">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h2">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h3">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h4">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h5">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h6">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Lists ============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ULStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list bullet styles
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disc"/>
+ <xs:enumeration value="square"/>
+ <xs:enumeration value="circle"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="ul">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="ULStyle"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="OLStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered list numbering style
+
+ 1 arabic numbers 1, 2, 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is applied to the sequence number which by default
+ is reset to 1 for the first list item in an ordered list.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="ol">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered (numbered) list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="OLStyle"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="start" type="Number"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="menu">
+ <xs:annotation>
+ <xs:documentation>
+ single column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dir">
+ <xs:annotation>
+ <xs:documentation>
+ multiple column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="LIStyle">
+ <xs:annotation>
+ <xs:documentation>
+ LIStyle is constrained to: "(ULStyle|OLStyle)"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="li">
+ <xs:annotation>
+ <xs:documentation>
+ list item
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="LIStyle"/>
+ <xs:attribute name="value" type="Number"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ definition lists - dt for term, dd for its definition
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="dl">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="dt"/>
+ <xs:element ref="dd"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dt">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dd">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Address ==========================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="address">
+ <xs:annotation>
+ <xs:documentation>
+ information on author
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ <xs:group ref="misc.inline"/>
+ <xs:element ref="p"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Horizontal Rule ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="hr">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="noshade">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="noshade"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="size" type="Pixels"/>
+ <xs:attribute name="width" type="Length"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Preformatted Text ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="pre">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" excluding
+ "img|object|applet|big|small|sub|sup|font|basefont"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="pre.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="width" type="Number"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Block-like Quotes ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="blockquote">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text alignment ===================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="center">
+ <xs:annotation>
+ <xs:documentation>
+ center content
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Inserted/Deleted Text ============================
+
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="ins">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="del">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== The Anchor Element ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="a">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" except that anchors shouldn't be nested
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="a.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="shape" default="rect" type="Shape"/>
+ <xs:attribute name="coords" type="Coords"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ===================== Inline Elements ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="span">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="bdo">
+ <xs:annotation>
+ <xs:documentation>
+ I18N BiDi over-ride
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="events"/>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="br">
+ <xs:annotation>
+ <xs:documentation>
+ forced line break
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="clear" default="none">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="all"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="none"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="em">
+ <xs:annotation>
+ <xs:documentation>
+ emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strong">
+ <xs:annotation>
+ <xs:documentation>
+ strong emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dfn">
+ <xs:annotation>
+ <xs:documentation>
+ definitional
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="code">
+ <xs:annotation>
+ <xs:documentation>
+ program code
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="samp">
+ <xs:annotation>
+ <xs:documentation>
+ sample
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="kbd">
+ <xs:annotation>
+ <xs:documentation>
+ something user would type
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="var">
+ <xs:annotation>
+ <xs:documentation>
+ variable
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="cite">
+ <xs:annotation>
+ <xs:documentation>
+ citation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="abbr">
+ <xs:annotation>
+ <xs:documentation>
+ abbreviation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="acronym">
+ <xs:annotation>
+ <xs:documentation>
+ acronym
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="q">
+ <xs:annotation>
+ <xs:documentation>
+ inlined quote
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sub">
+ <xs:annotation>
+ <xs:documentation>
+ subscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sup">
+ <xs:annotation>
+ <xs:documentation>
+ superscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tt">
+ <xs:annotation>
+ <xs:documentation>
+ fixed pitch font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="i">
+ <xs:annotation>
+ <xs:documentation>
+ italic font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="b">
+ <xs:annotation>
+ <xs:documentation>
+ bold font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="big">
+ <xs:annotation>
+ <xs:documentation>
+ bigger font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="small">
+ <xs:annotation>
+ <xs:documentation>
+ smaller font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="u">
+ <xs:annotation>
+ <xs:documentation>
+ underline
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="s">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strike">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="basefont">
+ <xs:annotation>
+ <xs:documentation>
+ base font size
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="size" use="required"/>
+ <xs:attribute name="color" type="Color"/>
+ <xs:attribute name="face"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="font">
+ <xs:annotation>
+ <xs:documentation>
+ local change to font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="size"/>
+ <xs:attribute name="color" type="Color"/>
+ <xs:attribute name="face"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ==================== Object ======================================
+
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="object">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="param"/>
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="declare">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="declare"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="classid" type="URI"/>
+ <xs:attribute name="codebase" type="URI"/>
+ <xs:attribute name="data" type="URI"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="codetype" type="ContentType"/>
+ <xs:attribute name="archive" type="UriList"/>
+ <xs:attribute name="standby" type="Text"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="usemap" type="URI"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="tabindex" type="Number"/>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="border" type="Pixels"/>
+ <xs:attribute name="hspace" type="Pixels"/>
+ <xs:attribute name="vspace" type="Pixels"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="param">
+ <xs:annotation>
+ <xs:documentation>
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="name" use="required"/>
+ <xs:attribute name="value"/>
+ <xs:attribute name="valuetype" default="data">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="data"/>
+ <xs:enumeration value="ref"/>
+ <xs:enumeration value="object"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="type" type="ContentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Java applet ==================================
+
+ One of code or object attributes must be present.
+ Place param elements before other content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="applet">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="param"/>
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="codebase" type="URI"/>
+ <xs:attribute name="archive"/>
+ <xs:attribute name="code"/>
+ <xs:attribute name="object"/>
+ <xs:attribute name="alt" type="Text"/>
+ <xs:attribute name=