<!--

Copyright (c) 2001-2004 World Wide Web Consortium, 
(Massachusetts Institute of Technology, Institut National de
Recherche en Informatique et en Automatique, Keio University).  All 
Rights Reserved.  This program is distributed under the W3C's Software
Intellectual Property License.  This program is distributed in the 
hope that it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  

See W3C License http://www.w3.org/Consortium/Legal/ for more details.

-->

<!--

This schema is attempts to use every construct that could
be interrogated by DOM Level 3 and is no way intended to
be a general purpose schema for XHTML  

-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.w3.org/1999/xhtml"
	xmlns="http://www.w3.org/1999/xhtml">

  <xsd:element name="html">
  	 <xsd:complexType>
  	 	<xsd:sequence>
  	 		<xsd:element ref="head"/>
  	 		<xsd:element ref="body"/>
  	 	</xsd:sequence>
  	 </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="head">
  	<xsd:complexType>
  		<xsd:sequence>
  			<xsd:element ref="meta"/>
  			<xsd:element ref="title"/>
  			<xsd:element ref="script" minOccurs="0" maxOccurs="unbounded"/>
  		</xsd:sequence>
  	</xsd:complexType>
  </xsd:element>
  
  <xsd:element name="meta">
  	<xsd:complexType>
  		<xsd:attribute name="http-equiv" type="xsd:string" use="required"/>
  		<xsd:attribute name="content" type="xsd:string" use="required"/>
  	</xsd:complexType>
  </xsd:element>
  
  <xsd:element name="script">
  	<xsd:complexType>
  		<xsd:simpleContent>
  			<xsd:extension base="xsd:string">
  				<xsd:attribute name="src" type="xsd:string" use="optional"/>
  				<xsd:attribute name="charset" type="xsd:string" use="optional"/>
  				<xsd:attribute name="type" type="xsd:string" use="required"/>
  			</xsd:extension>
  		</xsd:simpleContent>
  	</xsd:complexType>
  </xsd:element>
  
  <xsd:element name="title" type="xsd:string"/>
  
  <xsd:element name="body">
  	<xsd:complexType>
  		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
  			<xsd:element ref="p"/>
  		</xsd:sequence>
  		<xsd:attribute name="onload" type="xsd:string" use="optional"/>
  	</xsd:complexType>
  </xsd:element>
  
  <xsd:simpleType name="classType">
  	  <xsd:restriction base="xsd:string">
  	  	  <xsd:enumeration value="Yes"/>
  	  	  <xsd:enumeration value="No"/>
  	  	  <xsd:enumeration value="Y&#945;"/>
  	  	  <xsd:enumeration value="Y"/>
  	  </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="part1">
  	  <xsd:sequence>
		  	  <xsd:element ref="em"/>
		  	  <xsd:element ref="strong"/>
		  	  <xsd:element ref="code"/>
	  </xsd:sequence>
  </xsd:complexType>
  
  <xsd:complexType name="pType">
  	  <xsd:complexContent>
  	  		<xsd:extension base="part1">
  	  	  		<xsd:sequence>
		  	  		<xsd:element ref="sup"/>
		  	  		<xsd:element ref="var"/>
		  	  		<xsd:element ref="acronym"/>
		  		</xsd:sequence>
		  		<xsd:attribute name="title" type="xsd:string" use="optional"/>
		  		<xsd:attribute name="class" type="classType" use="optional"/>
  				<xsd:attribute name="dir" type="dirType" use="optional" default="rtl"/>
		  		<xsd:attribute name="foo" type="xsd:string" use="optional"/>
	  		</xsd:extension>
	  	</xsd:complexContent>
  </xsd:complexType> 
  
    	  	    
  <xsd:element name="p">
  	  <xsd:complexType>
  	  	  <xsd:complexContent>
  	  	  	   <xsd:restriction base="pType">
  	  	  	   		<xsd:sequence>
		  	  			<xsd:element ref="em"/>
		  	  			<xsd:element ref="strong"/>
		  	  			<xsd:element ref="code"/>
		  	  			<xsd:element ref="sup"/>
		  	  			<xsd:element ref="var"/>
		  	  			<xsd:element ref="acronym"/>
		  	  		</xsd:sequence>
		  			<xsd:attribute name="title" type="xsd:string" use="optional"/>
		  			<xsd:attribute name="class" type="classType" use="optional"/>
  					<xsd:attribute name="dir" type="dirType" use="optional" default="rtl"/>
		  			<xsd:attribute name="foo" type="xsd:string" use="prohibited"/>
		  	    </xsd:restriction>
		  </xsd:complexContent>
	  </xsd:complexType>
  </xsd:element>
  
  <xsd:simpleType name="emp0001_3Type">
  	  <xsd:restriction base="xsd:ID">
  	  	  <xsd:enumeration value="EMP0001"/>
  	  	  <xsd:enumeration value="EMP0002"/>
  	  	  <xsd:enumeration value="EMP0003"/>
  	  	  <xsd:enumeration value="EMP0004"/>
  	  	  <xsd:enumeration value="EMP0005"/>
  	  </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="emp0004_5Type">
  	  <xsd:restriction base="xsd:ID">
  	  	  <xsd:enumeration value="EMP0006"/>
  	  	  <xsd:enumeration value="EMP0007"/>
  	  </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="unboundedEmType">
  		<xsd:union memberTypes="emp0001_3Type emp0004_5Type"/>
  </xsd:simpleType>
  
  <xsd:simpleType name="emType">
  	    <xsd:restriction base="unboundedEmType">
  	    	<xsd:pattern value="EMP[0-9]*"/>
  	    </xsd:restriction>
  </xsd:simpleType>
  		
  
  <xsd:element name="em" type="emType"/>
  
  <xsd:simpleType name="unboundedStrongType">
  		<xsd:list itemType="xsd:string"/>
  </xsd:simpleType>
  
  
  <xsd:simpleType name="strongType">
  	  <xsd:restriction base="unboundedStrongType">
  	  	  <xsd:maxLength value="100"/>
  	  </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:element name="strong" type="strongType"/>
  
  <!--  union of union and union of list   -->
  <xsd:simpleType name="integers">
  	 <xsd:list itemType="xsd:integer"/>
  </xsd:simpleType>
  
  
  <xsd:simpleType name="sup">
  	<xsd:union memberTypes="emType integers xsd:string"/>
  </xsd:simpleType>
  <xsd:element name="sup" type="sup"/>
  
  <!--   list of union of union  -->
  <xsd:simpleType name="supervisoryTitle">
  	<xsd:restriction base="xsd:string">
  	  <xsd:enumeration value="Specialist"/>
  	  <xsd:enumeration value="Director"/>
  	  <xsd:enumeration value="Manager"/>
  	</xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="nonSupervisoryTitle">
  	<xsd:restriction base="xsd:string">
	  <xsd:enumeration value="Accountant"/>
	  <xsd:enumeration value="Secretary"/>
  	</xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="title">
  	<xsd:union memberTypes="supervisoryTitle nonSupervisoryTitle"/>
  </xsd:simpleType>
	  
  <xsd:simpleType name="field">
  	<xsd:restriction base="xsd:string">
	  <xsd:enumeration value="Department"/>
	  <xsd:enumeration value="Personnel"/>
	  <xsd:enumeration value="Computer"/>
  	</xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="codeItem">
  	<xsd:union memberTypes="field title"/>
  </xsd:simpleType>
  <xsd:simpleType name="code">
  	<xsd:list itemType="codeItem"/>
  </xsd:simpleType>
  <xsd:element name="code" type="code"/>
  
  <xsd:element name="span" type="xsd:string"/>
  
  <xsd:complexType name="var" mixed="true">
  	  	<xsd:sequence>
  	  		<xsd:element ref="span" minOccurs="0"/>
  	  	</xsd:sequence>
  </xsd:complexType>
  
  <xsd:element name="var" type="var"/>
  
  <xsd:simpleType name="dirType">
  	  <xsd:restriction base="xsd:string">
  	  	  <xsd:enumeration value="ltr"/>
  	  	  <xsd:enumeration value="rtl"/>
  	  </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:element name="acronym">
  	<xsd:complexType>
  		<xsd:simpleContent>
  			<xsd:extension base="xsd:string">
  				<xsd:attribute name="class" type="classType" use="optional"/>
  				<xsd:attribute name="title" type="xsd:string" use="optional"/>
  				<xsd:attribute name="id" type="xsd:ID" use="optional"/>
  			</xsd:extension>
  		</xsd:simpleContent>
  	</xsd:complexType>
  </xsd:element>
</xsd:schema>
