<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (C) 2003, Ademar Aguiar <ademar.aguiar@fe.up.pt> -->
<!-- A XML Schema for JavaML, a XML representation of Java Source Code -->
<!-- http://www.fe.up.pt/~aaguiar/javaml/ -->
<!-- evolved from the DTD for JavaML originally created by Greg J. Badros <gjb@cs.washington.edu> -->
<!-- http://www.cs.washington.edu/homes/gjb/papers/javaml/javaml.html -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
	<xs:attributeGroup name="location">
		<xs:attribute name="line" type="xs:string"/>
		<xs:attribute name="col" type="xs:string"/>
		<xs:attribute name="end-line" type="xs:string"/>
		<xs:attribute name="end-col" type="xs:string"/>
		<xs:attribute name="commentToken" type="xs:string"/>
		<xs:attribute name="startToken" type="xs:string"/>
		<xs:attribute name="endToken" type="xs:string"/>
		<xs:attribute name="idkind" type="xs:string"/>
	</xs:attributeGroup>
	<xs:group name="stmt">
		<xs:choice>
			<xs:element ref="block"/>
			<xs:element ref="local-variable-decl"/>
			<xs:element ref="try"/>
			<xs:element ref="throw"/>
			<xs:element ref="if"/>
			<xs:element ref="switch"/>
			<xs:element ref="loop"/>
			<xs:element ref="do-loop"/>
			<xs:element ref="return"/>
			<xs:element ref="continue"/>
			<xs:element ref="break"/>
			<xs:element ref="synchronized"/>
			<xs:group ref="expr"/>
		</xs:choice>
	</xs:group>
	<xs:group name="expr">
		<xs:choice>
			<xs:element ref="send"/>
			<xs:element ref="new"/>
			<xs:element ref="new-array"/>
			<xs:element ref="var-ref"/>
			<xs:element ref="formal-ref"/>
			<xs:element ref="field-ref"/>
			<xs:element ref="field-access"/>
			<xs:element ref="array-ref"/>
			<xs:element ref="paren"/>
			<xs:element ref="assignment-expr"/>
			<xs:element ref="conditional-expr"/>
			<xs:element ref="binary-expr"/>
			<xs:element ref="unary-expr"/>
			<xs:element ref="cast-expr"/>
			<xs:element ref="instanceof-test"/>
			<xs:element ref="literal-number"/>
			<xs:element ref="literal-string"/>
			<xs:element ref="literal-char"/>
			<xs:element ref="literal-boolean"/>
			<xs:element ref="literal-null"/>
			<xs:element ref="this"/>
			<xs:element ref="super"/>
		</xs:choice>
	</xs:group>
	<xs:simpleType name="visibilityType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="public"/>
			<xs:enumeration value="private"/>
			<xs:enumeration value="protected"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="anonymous-class">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="superclass" minOccurs="0"/>
				<xs:element ref="implement" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="constructor"/>
					<xs:element ref="method"/>
					<xs:element ref="field"/>
					<xs:element ref="instance-initializer"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="abstract" type="xs:string"/>
			<xs:attribute name="final" type="xs:string"/>
			<xs:attribute name="synchronized" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="arguments">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="array-initializer">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="array-initializer"/>
				<xs:group ref="expr"/>
			</xs:choice>
			<xs:attribute name="length" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="array-ref">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="base"/>
				<xs:element ref="offset"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="assignment-expr">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="lvalue"/>
				<xs:group ref="expr"/>
			</xs:sequence>
			<xs:attribute name="op" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="base">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="binary-expr">
		<xs:complexType>
			<xs:group ref="expr" minOccurs="2" maxOccurs="2"/>
			<xs:attribute name="op" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="block">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="label" minOccurs="0" maxOccurs="unbounded"/>
				<xs:group ref="stmt" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="break">
		<xs:complexType>
			<xs:attribute name="targetname" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="case">
		<xs:complexType>
			<xs:sequence>
				<xs:group ref="expr"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="cast-expr">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="type"/>
				<xs:group ref="expr"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="catch">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="formal-argument"/>
				<xs:element ref="block"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="class">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="doc-comment" minOccurs="0"/>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="superclass" minOccurs="0"/>
				<xs:element ref="implement" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="class"/>
					<xs:element ref="interface"/>
					<xs:element ref="constructor"/>
					<xs:element ref="method"/>
					<xs:element ref="field"/>
					<xs:element ref="static-initializer"/>
					<xs:element ref="instance-initializer"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attributeGroup ref="location"/>
			<xs:attribute name="id" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
		<xs:key name="KeyConstructor">
			<xs:selector xpath="./constructor"/>
			<xs:field xpath="@id"/>
		</xs:key>
		<xs:key name="KeyMethod">
			<xs:selector xpath="./method"/>
			<xs:field xpath="@id"/>
		</xs:key>
		<xs:key name="KeyField">
			<xs:selector xpath=".//field"/>
			<xs:field xpath="@id"/>
		</xs:key>
		<xs:key name="KeyFormalArgument">
			<xs:selector xpath=".//method/*/formal-argument|.//constructor/*/formal-argument"/>
			<xs:field xpath="@id"/>
		</xs:key>
		<xs:keyref name="RefFormalArgument" refer="KeyFormalArgument">
			<xs:selector xpath=".//formal-ref"/>
			<xs:field xpath="@idref"/>
		</xs:keyref>
	<xs:key name="KeyLocalVariable">
	 <xs:selector xpath=".//local-variable|.//catch/formal-argument"/>
	 <xs:field xpath="@id"/>
	</xs:key>
	<xs:keyref name="RefLocalVariable" refer="KeyLocalVariable">
	 <xs:selector xpath=".//var-ref"/>
	 <xs:field xpath="@idref"/>
	</xs:keyref>
	</xs:element>
	<xs:element name="modifiers">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="modifier" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="modifier">
		<xs:complexType>
			<xs:attribute name="name" type="modifierType"/>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="modifierType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="public"/>
			<xs:enumeration value="private"/>
			<xs:enumeration value="protected"/>
			<xs:enumeration value="abstract"/>
			<xs:enumeration value="final"/>
			<xs:enumeration value="static"/>
			<xs:enumeration value="synchronized"/>
			<xs:enumeration value="volatile"/>
			<xs:enumeration value="transient"/>
			<xs:enumeration value="native"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="code-fragment">
		<xs:complexType mixed="true"/>
	</xs:element>
	<xs:element name="conditional-expr">
		<xs:complexType>
			<xs:sequence>
				<xs:group ref="expr" minOccurs="3" maxOccurs="3"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="constructor">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="doc-comment" minOccurs="0"/>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="formal-arguments"/>
				<xs:element ref="throws" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0">
					<xs:element ref="super-call"/>
					<xs:element ref="this-call"/>
				</xs:choice>
				<xs:element ref="block"/>
			</xs:sequence>
			<xs:attribute name="id" type="xs:string"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="continue">
		<xs:complexType>
			<xs:attribute name="targetname" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="default-case">
		<xs:complexType/>
	</xs:element>
	<xs:element name="dim-expr">
		<xs:complexType>
			<xs:sequence>
				<xs:group ref="expr"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="do-loop">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:group ref="expr" minOccurs="0"/>
				<xs:element ref="test" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="extend">
		<xs:complexType>
			<xs:attribute name="interface" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="false-case">
		<xs:complexType>
			<xs:sequence>
				<xs:group ref="stmt" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="field">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="doc-comment" minOccurs="0"/>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="type"/>
				<xs:choice minOccurs="0">
					<xs:element ref="var-initializer" minOccurs="0"/>
					<xs:element ref="array-initializer"/>
					<xs:group ref="expr"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="id" type="xs:string" use="required"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="field-access">
		<xs:complexType>
			<xs:choice>
				<xs:element ref="type"/>
				<xs:group ref="expr"/>
			</xs:choice>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attribute name="idkind" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="field-set">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attribute name="idkind" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="finally">
		<xs:complexType>
			<xs:choice>
				<xs:element ref="block"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="formal-argument">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="type"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="id" type="xs:string" use="required"/>
			<xs:attribute name="final" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="formal-arguments">
		<xs:complexType mixed="true">
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="formal-argument"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="if">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="test"/>
				<xs:element ref="true-case"/>
				<xs:element ref="false-case" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="implement">
		<xs:complexType mixed="true">
			<xs:attribute name="interface" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attribute name="idkind" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="import">
		<xs:complexType>
			<xs:attribute name="module" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="loop-init">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="local-variable-decl"/>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="instance-initializer">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:group ref="stmt"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="instanceof-test">
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:group ref="expr"/>
				</xs:choice>
				<xs:element ref="type"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="interface">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="doc-comment" minOccurs="0"/>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="extend" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element ref="class"/>
					<xs:element ref="method"/>
					<xs:element ref="field"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="id" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="java-class-file">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="package-decl" minOccurs="0"/>
				<xs:element ref="import" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice maxOccurs="unbounded">
					<xs:element ref="class"/>
					<xs:element ref="interface"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="version" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="java-source-program">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="java-class-file" maxOccurs="unbounded"/>
				<xs:element ref="type-dependences" minOccurs="0"/>
				<xs:element ref="java-source-code" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="label">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="literal-boolean">
		<xs:complexType>
			<xs:attribute name="value" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="true"/>
						<xs:enumeration value="false"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="literal-char">
		<xs:complexType>
			<xs:attribute name="value" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="literal-null">
		<xs:complexType/>
	</xs:element>
	<xs:element name="literal-number">
		<xs:complexType>
			<xs:attribute name="value" type="xs:string" use="required"/>
			<xs:attribute name="kind">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="integer"/>
						<xs:enumeration value="long"/>
						<xs:enumeration value="float"/>
						<xs:enumeration value="double"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="base" type="xs:string" default="10"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="literal-string">
		<xs:complexType>
			<xs:attribute name="value" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="local-variable-decl">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="type"/>
				<xs:element ref="local-variable" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="local-variable">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="var-initializer" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="id" type="xs:string" use="required"/>
			<xs:attribute name="continued" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="var-initializer">
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:element ref="static-initializer"/>
				<xs:element ref="array-initializer"/>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="loop">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="loop-init" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="test" minOccurs="0"/>
				<xs:element ref="loop-update" minOccurs="0" maxOccurs="unbounded"/>
				<xs:choice minOccurs="0">
					<xs:group ref="stmt"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="kind">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="for"/>
						<xs:enumeration value="while"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="lvalue">
		<xs:complexType>
			<xs:choice>
				<xs:element ref="var-set"/>
				<xs:element ref="field-set"/>
				<xs:element ref="formal-set"/>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="method">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="doc-comment" minOccurs="0"/>
				<xs:element ref="modifiers" minOccurs="0"/>
				<xs:element ref="type"/>
				<xs:element ref="formal-arguments"/>
				<xs:element ref="throws" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="block" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="id" type="xs:string" use="required"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="new">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="type"/>
				<xs:element ref="arguments"/>
				<xs:element ref="anonymous-class" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="idref" type="xs:string" use="required"/>
			<xs:attribute name="idkind" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="new-array">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="type"/>
				<xs:element ref="dim-expr" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="array-initializer" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="dimensions" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="offset">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="package-decl">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="paren">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="result">
		<xs:complexType mixed="true"/>
	</xs:element>
	<xs:element name="return">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0">
				<xs:choice minOccurs="0">
					<xs:group ref="expr"/>
				</xs:choice>
			</xs:choice>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="send">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="target" minOccurs="0"/>
				<xs:element ref="arguments"/>
			</xs:sequence>
			<xs:attribute name="message" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attribute name="idkind" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="static-initializer">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:group ref="stmt"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="super">
		<xs:complexType/>
	</xs:element>
	<xs:element name="super-call">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="arguments"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="superclass">
		<xs:complexType mixed="true">
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="switch">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:choice>
					<xs:group ref="expr"/>
				</xs:choice>
				<xs:element ref="switch-block" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="switch-block">
		<xs:complexType>
			<xs:sequence>
				<xs:choice maxOccurs="unbounded">
					<xs:element ref="case"/>
				</xs:choice>
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:group ref="stmt"/>
				</xs:choice>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="synchronized">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:group ref="expr"/>
				<xs:element ref="block"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="target">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
				<xs:element ref="type"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="test">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="this">
		<xs:complexType/>
	</xs:element>
	<xs:element name="this-call">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="arguments"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="throw">
		<xs:complexType mixed="true">
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="throws">
		<xs:complexType mixed="true">
			<xs:sequence maxOccurs="unbounded">
				<xs:element ref="exception"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="exception">
		<xs:complexType mixed="true">
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="true-case">
		<xs:complexType>
			<xs:choice minOccurs="0">
				<xs:group ref="stmt"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="try">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element ref="block"/>
				<xs:element ref="catch" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="finally" minOccurs="0"/>
			</xs:sequence>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="type">
		<xs:complexType mixed="true">
			<xs:attribute name="primitive" type="xs:string"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="dimensions" type="xs:string"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="unary-expr">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
			<xs:attribute name="op" type="xs:string" use="required"/>
			<xs:attribute name="post">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="true"/>
						<xs:enumeration value="false"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="loop-update">
		<xs:complexType>
			<xs:choice>
				<xs:group ref="expr"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="field-ref">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="var-ref">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="var-set">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="formal-set">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="formal-ref">
		<xs:complexType>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="idref" type="xs:string" use="required"/>
			<xs:attributeGroup ref="location"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="htmlType" mixed="true">
		<xs:sequence>
			<xs:any namespace="http://www.w3.org/1999/xhtml" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="token" type="xs:string"/>
	</xs:complexType>
	<xs:element name="doc-comment" type="htmlType"/>
	<xs:element name="type-dependences">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="type-dependence" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="type-ref" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="signature" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="filename" type="xs:string" use="required"/>
						<xs:attribute name="signature" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
		<xs:key name="KeyTypeSignature">
			<xs:selector xpath=".//type-dependence"/>
			<xs:field xpath="@signature"/>
		</xs:key>
		<xs:keyref name="RefTypeSignature" refer="KeyTypeSignature">
			<xs:selector xpath="type-ref"/>
			<xs:field xpath="@signature"/>
		</xs:keyref>
		<xs:keyref name="RefType" refer="KeyTypeSignature">
			<xs:selector xpath="type|exception"/>
			<xs:field xpath="@idref"/>
		</xs:keyref>
	</xs:element>
	<xs:element name="java-source-code">
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:element ref="codeline" minOccurs="0"/>
				<xs:element ref="separator" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="id" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="codeline">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="token" minOccurs="0"/>
				<xs:element ref="comment" minOccurs="0"/>
				<xs:element ref="sp" minOccurs="0"/>
			</xs:choice>
			<xs:attribute name="no" type="xs:integer"/>
			<xs:attribute name="refid" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="separator"/>
	<xs:element name="token">
		<xs:complexType>
			<xs:attribute name="idx" type="xs:string"/>
			<xs:attribute name="id" type="xs:string"/>
			<xs:attribute name="idref" type="xs:string"/>
			<xs:attribute name="idkind" type="xs:string"/>
			<xs:attribute name="afterEol" type="xs:boolean"/>
			<xs:attribute name="line" type="xs:integer"/>
			<xs:attribute name="column" type="xs:integer"/>
			<xs:attribute name="type" type="xs:string"/>
			<xs:attribute name="deprecated" type="xs:boolean"/>
			<xs:attribute name="lexeme" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="comment">
		<xs:complexType mixed="true">
			<xs:attribute name="idx" type="xs:string"/>
			<xs:attribute name="type" type="xs:string"/>
			<xs:attribute name="line" type="xs:integer"/>
			<xs:attribute name="column" type="xs:integer"/>
			<xs:attribute name="continued" type="xs:boolean"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="sp"/>
</xs:schema>
