diff --git a/.bzrignore b/.bzrignore
new file mode 100644
index 0000000000000000000000000000000000000000..526e9d34d252f798fe385de2123470deb97f15ab
--- /dev/null
+++ b/.bzrignore
@@ -0,0 +1,2 @@
+AST
+*.class
diff --git a/Dumper.java b/Dumper.java
new file mode 100644
index 0000000000000000000000000000000000000000..879deac3a69e6cd829fcdc06251a54688813fc8b
--- /dev/null
+++ b/Dumper.java
@@ -0,0 +1,17 @@
+/* 
+ * Copyright (C) 2006  Anders Nilsson <anders.nilsson@cs.lth.se>
+ *
+ * This file is part of OntologyCompiler.
+ */
+
+
+import AST.Start;
+
+public class Dumper extends Parser {
+	public static void main(String args[]) {
+		Start ast = parse(args);
+
+		// Dump the AST
+		ast.dumpTree("  ", System.out);
+	}
+}
diff --git a/GenCompiler.java b/GenCompiler.java
index 39dca6e7a2e43bf881feb8bedbf487923e92f0f7..2a0b43d87aa89be747a7e2adb6452b7a5e6a08c0 100644
--- a/GenCompiler.java
+++ b/GenCompiler.java
@@ -14,31 +14,31 @@ public class GenCompiler extends Parser {
 	public static void main(String args[]) {
 		Start ast = parse(args);
 
-		File siarasDir = new File("siaras");
-		if (!siarasDir.isDirectory()) {
-			siarasDir.mkdir();
-		}
+// 		File siarasDir = new File("siaras");
+// 		if (!siarasDir.isDirectory()) {
+// 			siarasDir.mkdir();
+// 		}
 		
-		String fileName = null;
-		try {
-			// Generate JastAdd abstract grammar
-			fileName = "siaras/Siaras.ast";
-			PrintStream pStream = new PrintStream(new File(fileName));
-			ast.genAbsGrammar(pStream);
+// 		String fileName = null;
+// 		try {
+// 			// Generate JastAdd abstract grammar
+// 			fileName = "siaras/Siaras.ast";
+// 			PrintStream pStream = new PrintStream(new File(fileName));
+// 			ast.genAbsGrammar(pStream);
 
-			// Generate Parser.java
-			fileName = "siaras/Parser.java";
-			pStream = new PrintStream(new File(fileName));
-			ast.genParser(pStream);
+// 			// Generate Parser.java
+// 			fileName = "siaras/Parser.java";
+// 			pStream = new PrintStream(new File(fileName));
+// 			ast.genParser(pStream);
 
-			// Generate aspects
-			fileName = "siaras/GeneratedAspects.jrag";
-			pStream = new PrintStream(new File(fileName));
-			ast.genAspects(pStream);
+// 			// Generate aspects
+// 			fileName = "siaras/GeneratedAspects.jrag";
+// 			pStream = new PrintStream(new File(fileName));
+// 			ast.genAspects(pStream);
 
-		} catch (java.io.FileNotFoundException e) {
-			System.out.println("Could not create file: "+fileName);
-			e.printStackTrace();
-		}
+// 		} catch (java.io.FileNotFoundException e) {
+// 			System.out.println("Could not create file: "+fileName);
+// 			e.printStackTrace();
+// 		}
 	}
 }
diff --git a/Parser.java b/Parser.java
index 637889add3149d9bd3eef3fefb17736e82f1a25e..0f7c6f9092bb1dab06ef3b2f24571636368c234c 100644
--- a/Parser.java
+++ b/Parser.java
@@ -10,7 +10,7 @@ import java.io.FileReader;
 import java.io.InputStreamReader;
 import java.io.Reader;
 
-import AST.OwlParser;
+import AST.SchemaParser;
 import AST.ParseException;
 import AST.Start;
 
@@ -20,7 +20,7 @@ public class Parser {
 		Reader r = getReader(args);
 		Start ast = null;
 		try {
-			OwlParser parser = new OwlParser(r);
+			SchemaParser parser = new SchemaParser(r);
 
 			ast = parser.Start();
 		} catch (ParseException e) {
diff --git a/build.xml b/build.xml
index d845542ff8d318b8c433d1f742008bade1bdb787..d8c53004ddc857012177576a3dbe38593a7f9d22 100644
--- a/build.xml
+++ b/build.xml
@@ -1,4 +1,4 @@
-!--
+<!--
     Targets for working from terminal window:
     build (default) - generates java files and compiles them
     clean           - removes all generated files and class files
diff --git a/examples/x3d-3.0.xsd b/examples/x3d-3.0.xsd
index 09b9cb8dc0863054b2dbfd746859a1629577e1c5..b2654f29d8d2c9091bf934d53d5b5bc014f19b11 100644
--- a/examples/x3d-3.0.xsd
+++ b/examples/x3d-3.0.xsd
@@ -8,76 +8,6 @@
 	<!--======================================================================-->
 	<xs:annotation>
 		<xs:appinfo>XML Schema for the Extensible 3D (X3D) Graphics Specification tagset</xs:appinfo>
-		<xs:documentation><![CDATA[
-=============================================================================
-
-X3D Specification Schema:  	http://www.web3d.org/specifications/x3d-3.0.xsd
-
-Schema extensions:		http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPublic.xsd
-				http://www.web3d.org/specifications/x3d-3.0-Web3dExtensionsPrivate.xsd
-
-Web3D extensions update URL:	http://www.web3d.org/x3d/content/x3d-3.0-Web3dExtensionsPublic.xsd
-
-Revised:  10 January 2006
-
-Author:   Don Brutzman
-
-Acknowledgements:
-- Thanks for excellent insights and assistance from Len Bullard,
-  Justin Couch, Leonard Daly, Paul Diefenbach, Rick Goldberg, Bryan Housel,
-  Alan Hudson, Chris Lilley, Braden McDaniel, Tony Parisi, Nick Polys,
-  Dick Puk, Jeff Sonstein, C. Michael Sperberg-McQueen, Henry Thompson
-  and Joe Williams.
-- Rick Goldberg of the Sun Java3D team wrote the first two versions of the
-  SAI API using IDL, and provided invaluable help on the schema-based SAI.
-- Joe Williams of HyperMultiMedia documented and further developed
-  the scene graph interface hierarchy, making this schema possible.
-- Alan Hudson added many default values and performed consistency checks.
-
-- XML Schema validator:		http://www.w3.org/2001/03/webdata/xsv
-
-Design summary:
-- Schemas define XML tagsets in depth using a native-XML format.
-- Schemas are an alternative to Document Type Definitions (DTDs).
-- This X3D Schema matches the functionality of the X3D DTD and
-  provides significant further capabilities, including strong type
-  checking of both node and attribute values.
-- An XSLT stylesheet can be applied to this schema to autogenerate
-  source code for the Scene Authoring Interface (SAI), documentation
-  of node lists, etc.
-
-Design patterns:
-- X3D nodes implement X3D node types and are represented by XML elements.
-- X3D non-node fields are represented by XML attributes using field types.
-- X3D field types are represented by XML Schema (xsd) simpleTypes.
-- XML Schema list types are used to augment XML Schema simple types, to
-  create arrays of X3D base types (integerList etc).
-- X3D node types (X3DGroupingNode etc.) are represented by Schema complexTypes.
-- X3D node types are captured as XML Schema complexType definitions.  These match 
-  the X3D interface hierarchy, capture strong typing of node relationships, and collect 
-  common attributes shared among node types.  These features also provide functional 
-  consistency between scene graph content and the X3D Scene Authoring Interface (SAI) 
-  application programming interface (API).
-- XML Schema xs:group element definitions provide child-node content models,
-  since complexTypes can't be used as references to unnamed element children.
-
-X3D Schema version numbering:
-- 0.4  Nodes for Core and Base profiles (20 November 2000)
-- 0.5  Nodes for DIS, GeoSpatial, HumanoidAnimation, Nurbs, any others in Full profile
-- 0.6  Autogenerated Scene Authoring Interface (SAI).  First show Java interfaces,
-       then show multiple formats including Interface Description Language (IDL)
-       and matching Java classes that implement the Java interfaces
-- 0.7  Resolution of compromise/compact representations (wrapper tags), and use of
-       DTD internal parameter-entity names updated to match interface hierarchy
-       naming scheme
-- 0.8  Exemplar content and authoring tools that correspond to X3D Schema tagset
-- 2.9  Public review and Xj3D open-source implementation version
-- 3.0  X3D Task Group consensus for inclusion in X3D Specification
-- 3.1  X3D Specification Amendment 1
-- 3.2  X3D Specification Amendment 2
-
-=============================================================================
-]]></xs:documentation>
 	</xs:annotation>
 	<!--======================================================================-->
 	<!--Several pattern possibilities for urls/URNs are conceivable, perhaps a type definition or regex pattern is preferable.-->
diff --git a/xmlschema.ast b/xmlschema.ast
new file mode 100644
index 0000000000000000000000000000000000000000..61d42fc19c67eaf35876c7549023b884b4b9e3db
--- /dev/null
+++ b/xmlschema.ast
@@ -0,0 +1,72 @@
+// -*-Java-*-
+
+ 
+// Copyright (C) 2006  Anders Nilsson <anders.nilsson@cs.lth.se>
+//
+// This file is part of OntologyCompiler.
+
+
+Start ::= Specification;
+
+Specification ::= XmlHeader; // RdfDeclaration;
+
+XmlHeader ::= Attribute*;
+
+abstract Element;
+abstract ComplexElement : Element ::= Attribute* Element*;
+
+XsAnnotation     : ComplexElement;
+XsDocumentation  : ComplexElement;
+XsInclude        : ComplexElement;
+XsRestriction    : ComplexElement;
+XsSimpleType     : ComplexElement;
+XsSchema         : ComplexElement;
+
+
+abstract SimpleElement : Element;
+StringElement : SimpleElement ::= <IDENTIFIER>;
+IntElement : SimpleElement ::= <INTEGER_LITERAL>;
+FloatElement : SimpleElement ::= <FLOAT_LITERAL>;
+
+abstract Attribute ::= Value;
+AttributeFormDefault : Attribute;
+Base                 : Attribute;
+ElementFormDefault   : Attribute;
+Encoding             : Attribute;
+Source               : Attribute;
+SchemaLocation       : Attribute;
+Version              : Attribute;
+XmlnsXs              : Attribute;
+// RdfAbout : Attribute;
+// RdfDatatype : Attribute;
+// RdfId : Attribute;
+// RdfParseType : Attribute;
+// RdfResource : Attribute;
+// XmlBase : Attribute;
+// Xmlns : Attribute;
+// XmlnsDaml : Attribute;
+// XmlnsDc : Attribute;
+// XmlnsP1 : Attribute;
+// XmlnsProtege : Attribute;
+// XmlnsRdf : Attribute;
+// XmlnsXsd : Attribute;
+// XmlnsRdfs : Attribute;
+// XmlnsOwl : Attribute;
+
+// DiscardedElement : Element ::= Identifier Attribute* Element*;
+
+Value ::= <STRING_LITERAL>;
+// Identifier ::= <IDENTIFIER>;
+
+// // Types used by rewrite rules
+// abstract OClass : ComplexElement ::= <Id:String>;
+// OwlClassDecl : OClass;
+// OwlClassUse : OClass;
+
+// abstract OwlValuesFrom: ComplexElement;
+
+
+// Properties ::= Property:Element*;
+// Restrictions ::= OwlRestriction*;
+
+// abstract OwlProperty : ComplexElement;
diff --git a/xmlschema.jjt b/xmlschema.jjt
index 31bd7ee681e32f3d93c88f81037e763924a83fb2..b4abcc180c98107a1cbc8015327cf589d51dab5c 100644
--- a/xmlschema.jjt
+++ b/xmlschema.jjt
@@ -14,9 +14,9 @@ options {
     NODE_PREFIX                 = "";
     JAVA_UNICODE_ESCAPE         = true;
     STATIC                      = false;
-//  	DEBUG_PARSER                = true;
-// 	DEBUG_LOOKAHEAD             = true;
-//  	DEBUG_TOKEN_MANAGER         = true;
+  	DEBUG_PARSER                = true;
+//  	DEBUG_LOOKAHEAD             = true;
+  	DEBUG_TOKEN_MANAGER         = true;
 } // options
 
 
@@ -66,53 +66,22 @@ SPECIAL_TOKEN : /* COMMENTS */
 
 <DEFAULT, BOUNDS> TOKEN : /* RESERVED WORDS AND LITERALS */
 {
-//     < OWL_ALLVALUESFROM     : "owl:allValuesFrom" >
-//   | < OWL_ALLDIFFERENT      : "owl:AllDifferent" >
-//   | < OWL_CARDINALITY        : "owl:cardinality" >
-//   | < OWL_CLASS             : "owl:Class" >
-//   | < OWL_DATARANGE         : "owl:DataRange" >
-//   | < OWL_DATATYPEPROPERTY  : "owl:DatatypeProperty" >
-//   | < OWL_DISJOINTWITH      : "owl:disjointWith" >
-//   | < OWL_DISTINCTMEMBERS      : "owl:distinctMembers" >
-//   | < OWL_EQUIVALENTCLASS   : "owl:equivalentClass" >
-//   | < OWL_FUNCTIONALPROPERTY : "owl:FunctionalProperty" >
-//   | < OWL_IMPORTS            : "owl:imports" >
-//   | < OWL_INTERSECTIONOF     : "owl:intersectionOf" >
-//   | < OWL_INVERSEOF         : "owl:inverseOf" >
-//   | < OWL_MINCARDINALITY     : "owl:minCardinality" >
-//   | < OWL_OBJECTPROPERTY    : "owl:ObjectProperty" >
-//   | < OWL_ONPROPERTY        : "owl:onProperty" >
-//   | < OWL_ONEOF             : "owl:oneOf" >
-//   | < OWL_ONTOLOGY          : "owl:Ontology" >
-//   | < OWL_RESTRICTION       : "owl:Restriction" >
-//   | < OWL_SOMEVALUESFROM    : "owl:someValuesFrom" >
-//   | < OWL_UNIONOF           : "owl:unionOf" >
-//   | < RDF_RDF            : "rdf:RDF"      >
-//   | < RDF_ABOUT          : "rdf:about" >
-//   | < RDF_DATATYPE          : "rdf:datatype" >
-//   | < RDF_ID                : "rdf:ID" >
-//   | < RDF_FIRST             : "rdf:first" >
-//   | < RDF_REST              : "rdf:rest" >
-//   | < RDF_PARSETYPE         : "rdf:parseType" >
-//   | < RDF_RESOURCE          : "rdf:resource" >
-//   | < RDF_TYPE              : "rdf:type" >
-//   | < RDFS_COMMENT          : "rdfs:comment" >
-//   | < RDFS_DOMAIN           : "rdfs:domain" >
-//   | < RDFS_RANGE            : "rdfs:range" >
-//   | < RDFS_SUBCLASSOF       : "rdfs:subClassOf" >
-//   | < RDFS_SUBPROPERTYOF     : "rdfs:subPropertyOf" >
-//   | < VERSION               : "version" >
-//   | < XML                   : "xml"          >
-//   | < XML_BASE              : "xml:base" >
-//   | < XMLNS                 : "xmlns" >	 
-//   | < XMLNS_DAML            : "xmlns:daml" >	 
-//   | < XMLNS_DC              : "xmlns:dc" >	 
-//   | < XMLNS_P1              : "xmlns:p1" >	 
-//   | < XMLNS_PROTEGE         : "xmlns:protege" >	 
-//   | < XMLNS_RDF             : "xmlns:rdf" >	 
-//   | < XMLNS_XSD             : "xmlns:xsd" >	 
-//   | < XMLNS_RDFS            : "xmlns:rdfs" >	 
-//   | < XMLNS_OWL             : "xmlns:owl" >	 
+    < XS_ANNOTATION            : "xs:annotation" >
+  | < XS_APPINFO               : "xs:appinfo" >
+  | < XS_DOCUMENTATION         : "xs:documentation" >
+  | < XS_INCLUDE               : "xs:include" >
+  | < XS_RESTRICTION           : "xs:restriction" >
+  | < XS_SCHEMA                : "xs:schema" >
+  | < XS_SIMPLETYPE            : "xs:simpleType" >
+  | < ATTRIBUTEFORMDEFAULT     : "attributeFormDefault" >
+  | < BASE                     : "base" >
+  | < ELEMENTFORMDEFAULT       : "elementFormDefault" >
+  | < ENCODING                 : "encoding" >
+  | < SCHEMALOCATION           : "schemaLocation" >
+  | < SOURCE                   : "source" >
+  | < VERSION                  : "version" >
+  | < XML                      : "xml"          >
+  | < XMLNS_XS                 : "xmlns:xs"          >
 
 }// RESERVED WORDS AND LITERALS
 <DEFAULT, BOUNDS> TOKEN : /* LITERALS */
@@ -221,9 +190,9 @@ SPECIAL_TOKEN : /* COMMENTS */
 
 <DEFAULT,BOUNDS> TOKEN : /* SEPARATORS */
 {
-//       < LPAREN               : "("    >
-//     | < RPAREN               : ")"    >
-     < LBRACE               : "{"    >
+      < LPAREN               : "("    >
+    | < RPAREN               : ")"    >
+    | < LBRACE               : "{"    >
     | < RBRACE               : "}"    >
     | < LBRACKET             : "["    >
     | < RBRACKET             : "]"    >
@@ -236,8 +205,9 @@ SPECIAL_TOKEN : /* COMMENTS */
 <DEFAULT,BOUNDS> TOKEN : /* OPERATORS */
 {
       < ASSIGN               : "="    >
-//     | < GT                   : ">"    >
-//     | < LT                   : "<"    >
+     | < GT                  : ">"    >
+     | < END_TAG             : "</"    >
+     | < LT                   : "<"    >
 //     | < BANG                 : "!"    >
 //     | < TILDE                : "~"    >
 //     | < HOOK                 : "?"    >
@@ -294,7 +264,7 @@ Start Start() #Start : {}
 void Specification() #Specification : {}
 {
     XmlHeader()
-	RdfDeclaration()
+ 	XsSchema()
 }
 
 void XmlHeader() #XmlHeader : {}
@@ -302,11 +272,11 @@ void XmlHeader() #XmlHeader : {}
     "<?" <XML> AttributeList() "?>"
 }
 
-void RdfDeclaration() #RdfDeclaration : {}
+void XsSchema() #XsSchema : {}
 {
-    "<"  <RDF_RDF> AttributeList() ">"
+    "<"  <XS_SCHEMA> AttributeList() ">"
 	ElementList()
-    "</" <RDF_RDF> ">"
+    "</" <XS_SCHEMA> ">"
 }
 
 void ElementList() #List : {}
@@ -316,260 +286,90 @@ void ElementList() #List : {}
 
 void Element() : {}
 {
-    ( "<" ( OwlElement()
-	    | RdfElement()
-		| DiscardedElement()
+    ( "<" (XsAnnotation()
+		| XsAppinfo()
+        | XsDocumentation()
+        | XsInclude()
+        | XsRestriction()
+        | XsSimpleType()
 	    ))
-	| SimpleElement()
+ 	| SimpleElement()
 }
 
-void DiscardedElement() #DiscardedElement : {}
+void XsAnnotation() #XsAnnotation : {}
 {
-	Identifier() AttributeList() 
-	(">" ElementList() "</" <IDENTIFIER> ">" | ElementList() "/>")
+    <XS_ANNOTATION> AttributeList() 
+		 (">" ElementList() "</" <XS_ANNOTATION> ">" | ElementList() "/>")
 }
 
-void Identifier() #Identifier : {Token t;}
+void XsAppinfo() #XsAppinfo : {}
 {
-	t = <IDENTIFIER>
-	{jjtThis.setIDENTIFIER(t.image);}
-}
-
-void SimpleElement() : {}
-{
-    IntElement()
-	| FloatElement()
-	| StringElement()
-}
-
-void IntElement() #IntElement : { Token t; }
-{
-    t = <INTEGER_LITERAL>
-	{jjtThis.setINTEGER_LITERAL(t.image);}
-}
-
-void FloatElement() #FloatElement : { Token t; }
-{
-    t = <FLOAT_LITERAL>
-	{jjtThis.setFLOAT_LITERAL(t.image);}
-}
-
-void StringElement() #StringElement : { Token t; }
-{
-    t = <IDENTIFIER> | t = <COMMA> | t = <MINUS> | t = <DOT> | t = <PLUS> | t = <SLASH>
-		| t = <COLON>
-	{jjtThis.setIDENTIFIER(t.image);}
-}
-
-void OwlElement() : {}
-{
-    OwlOntology()
-	| OwlAllDifferent()
-	| OwlAllValuesFrom()
-	| OwlCardinality()
-	| OwlClass()
-	| OwlDataRange()
-	| OwlDatatypeProperty()
-	| OwlDisjointWith()
-	| OwlDistinctMembers()
-	| OwlEquivalentClass()
-	| OwlFunctionalProperty()
-	| OwlImports()
-	| OwlIntersectionOf()
-	| OwlInverseOf()
-	| OwlMinCardinality()
-	| OwlObjectProperty()
-	| OwlOneOf()
-	| OwlOnProperty()
-	| OwlSomeValuesFrom()
-	| OwlRestriction()
-	| OwlUnionOf()
-}
-
-void OwlOntology() #OwlOntology : {}
-{
-    <OWL_ONTOLOGY> AttributeList() 
-	(">" ElementList() "</" <OWL_ONTOLOGY> ">" | ElementList() "/>")
-}
-
-void OwlAllDifferent() #OwlAllDifferent : {}
-{
-    <OWL_ALLDIFFERENT> AttributeList() 
-	(">" ElementList() "</" <OWL_ALLDIFFERENT> ">" | ElementList() "/>")
-}
-
-void OwlAllValuesFrom() #OwlAllValuesFrom : {}
-{
-    <OWL_ALLVALUESFROM> AttributeList() 
-	(">" ElementList() "</" <OWL_ALLVALUESFROM> ">" | ElementList() "/>")
-}
-
-void OwlCardinality() #OwlCardinality : {}
-{
-    <OWL_CARDINALITY> AttributeList() 
-	(">" ElementList() "</" <OWL_CARDINALITY> ">" | ElementList() "/>")
-}
-
-void OwlClass() #OwlClass : {}
-{
-    <OWL_CLASS> AttributeList() 
-	(">" ElementList() "</" <OWL_CLASS> ">" | ElementList() "/>")
-}
-
-void OwlDataRange() #OwlDataRange : {}
-{
-    <OWL_DATARANGE> AttributeList() 
-	(">" ElementList() "</" <OWL_DATARANGE> ">" | ElementList() "/>")
-}
-
-void OwlDatatypeProperty() #OwlDatatypeProperty : {}
-{
-    <OWL_DATATYPEPROPERTY> AttributeList() 
-	(">" ElementList() "</" <OWL_DATATYPEPROPERTY> ">" | ElementList() "/>")
-}
-
-void OwlDisjointWith() #OwlDisjointWith : {}
-{
-    <OWL_DISJOINTWITH> AttributeList() 
-	(">" ElementList() "</" <OWL_DISJOINTWITH> ">" | ElementList() "/>")
-}
-
-void OwlDistinctMembers() #OwlDistinctMembers : {}
-{
-    <OWL_DISTINCTMEMBERS> AttributeList() 
-	(">" ElementList() "</" <OWL_DISTINCTMEMBERS> ">" | ElementList() "/>")
-}
-
-void OwlEquivalentClass() #OwlEquivalentClass : {}
-{
-    <OWL_EQUIVALENTCLASS> AttributeList() 
-	(">" ElementList() "</" <OWL_EQUIVALENTCLASS> ">" | ElementList() "/>")
-}
-
-void OwlFunctionalProperty() #OwlFunctionalProperty : {}
-{
-    <OWL_FUNCTIONALPROPERTY> AttributeList() 
-	(">" ElementList() "</" <OWL_FUNCTIONALPROPERTY> ">" | ElementList() "/>")
-}
-
-void OwlImports () #OwlImports  : {}
-{
-    <OWL_IMPORTS> AttributeList() 
-	(">" ElementList() "</" <OWL_IMPORTS> ">" | ElementList() "/>")
-}
-
-void OwlIntersectionOf () #OwlIntersectionOf  : {}
-{
-    <OWL_INTERSECTIONOF> AttributeList() 
-	(">" ElementList() "</" <OWL_INTERSECTIONOF> ">" | ElementList() "/>")
-}
-
-void OwlInverseOf () #OwlInverseOf  : {}
-{
-    <OWL_INVERSEOF> AttributeList() 
-	(">" ElementList() "</" <OWL_INVERSEOF> ">" | ElementList() "/>")
+    <XS_APPINFO> AttributeList() 
+		 (">" ElementList() "</" <XS_APPINFO> ">" | ElementList() "/>")
 }
 
-void OwlMinCardinality () #OwlMinCardinality  : {}
+void XsDocumentation() #XsDocumentation : {}
 {
-    <OWL_MINCARDINALITY> AttributeList() 
-	(">" ElementList() "</" <OWL_MINCARDINALITY> ">" | ElementList() "/>")
+    <XS_DOCUMENTATION> AttributeList() 
+		 (">" ElementList() "</" <XS_DOCUMENTATION> ">" | ElementList() "/>")
 }
 
-void OwlObjectProperty () #OwlObjectProperty  : {}
+void XsInclude() #XsInclude : {}
 {
-    <OWL_OBJECTPROPERTY> AttributeList() 
-	(">" ElementList() "</" <OWL_OBJECTPROPERTY> ">" | ElementList() "/>")
+    <XS_INCLUDE> AttributeList() 
+		 (">" ElementList() "</" <XS_INCLUDE> ">" | ElementList() "/>")
 }
 
-void OwlOneOf () #OwlOneOf  : {}
+void XsRestriction() #XsRestriction : {}
 {
-    <OWL_ONEOF> AttributeList() 
-	(">" ElementList() "</" <OWL_ONEOF> ">" | ElementList() "/>")
+    <XS_RESTRICTION> AttributeList() 
+		 (">" ElementList() "</" <XS_RESTRICTION> ">" | ElementList() "/>")
 }
 
-void OwlOnProperty () #OwlOnProperty  : {}
+void XsSimpleType() #XsSimpleType : {}
 {
-    <OWL_ONPROPERTY> AttributeList() 
-	(">" ElementList() "</" <OWL_ONPROPERTY> ">" | ElementList() "/>")
+    <XS_SIMPLETYPE> AttributeList() 
+		 (">" ElementList() "</" <XS_SIMPLETYPE> ">" | ElementList() "/>")
 }
 
-void OwlSomeValuesFrom () #OwlSomeValuesFrom  : {}
-{
-    <OWL_SOMEVALUESFROM> AttributeList() 
-	(">" ElementList() "</" <OWL_SOMEVALUESFROM> ">" | ElementList() "/>")
-}
-
-void OwlRestriction () #OwlRestriction  : {}
-{
-    <OWL_RESTRICTION> AttributeList() 
-	(">" ElementList() "</" <OWL_RESTRICTION> ">" | ElementList() "/>")
-}
-
-void OwlUnionOf () #OwlUnionOf  : {}
-{
-    <OWL_UNIONOF> AttributeList() 
-	(">" ElementList() "</" <OWL_UNIONOF> ">" | ElementList() "/>")
-}
-
-void RdfElement() : {}
-{
-    RdfType()
-	| RdfFirst()
-	| RdfRest()
-	| RdfsComment()
-	| RdfsDomain()
-	| RdfsRange()
-	| RdfsSubClassOf()
-	| RdfsSubPropertyOf()
-}
-
-void RdfType() #RdfType : {}
-{
-    <RDF_TYPE> AttributeList() 
-	(">" ElementList() "</" <RDF_TYPE> ">" | ElementList() "/>")
-}
-
-void RdfFirst() #RdfFirst : {}
-{
-    <RDF_FIRST> AttributeList() 
-	(">" ElementList() "</" <RDF_FIRST> ">" | ElementList() "/>")
-}
-
-void RdfRest() #RdfRest : {}
-{
-    <RDF_REST> AttributeList() 
-	(">" ElementList() "</" <RDF_REST> ">" | ElementList() "/>")
-}
-
-void RdfsComment() #RdfsComment : {}
+void SimpleElement() : {}
 {
-    <RDFS_COMMENT> AttributeList() 
-	(">" ElementList() "</" <RDFS_COMMENT> ">" | ElementList() "/>")
+    IntElement()
+        | FloatElement()
+        | StringElement()
 }
 
-void RdfsDomain() #RdfsDomain : {}
+void IntElement() #IntElement : { Token t; }
 {
-    <RDFS_DOMAIN> AttributeList() 
-	(">" ElementList() "</" <RDFS_DOMAIN> ">" | ElementList() "/>")
+    t = <INTEGER_LITERAL>
+        {jjtThis.setINTEGER_LITERAL(t.image);}
 }
 
-void RdfsRange() #RdfsRange : {}
+void FloatElement() #FloatElement : { Token t; }
 {
-    <RDFS_RANGE> AttributeList() 
-	(">" ElementList() "</" <RDFS_RANGE> ">" | ElementList() "/>")
+    t = <FLOAT_LITERAL>
+        {jjtThis.setFLOAT_LITERAL(t.image);}
 }
 
-void RdfsSubClassOf() #RdfsSubClassOf : {}
+void StringElement() #StringElement : { Token t;String s; }
 {
-    <RDFS_SUBCLASSOF> AttributeList() 
-	(">" ElementList() "</" <RDFS_SUBCLASSOF> ">" | ElementList() "/>")
+//     t = <IDENTIFIER> | t = <COMMA> | t = <MINUS> | t = <DOT> | t = <PLUS> | t = <SLASH>
+//                 | t = <COLON>
+	t = <IDENTIFIER>
+	{
+		s = t.image;
+		if (getToken(1).kind != LT ) {
+		getData(s);
+	}
+	}
+        {jjtThis.setIDENTIFIER(t.image);}
 }
 
-void RdfsSubPropertyOf() #RdfsSubPropertyOf : {}
-{
-    <RDFS_SUBPROPERTYOF> AttributeList() 
-	(">" ElementList() "</" <RDFS_SUBPROPERTYOF> ">" | ElementList() "/>")
+JAVACODE
+void getData(String s) {
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != END_TAG)
+        s += getNextToken().image;
 }
 
 void AttributeList() #List : {}
@@ -580,117 +380,56 @@ void AttributeList() #List : {}
 void Attribute() : {}
 {
     Version()
-	| RdfAttribute()
-	| XmlAttribute()
-	| XmlnsAttribute()
+  |	AttributeFormDefault()
+  |	Base()
+  |	ElementFormDefault()
+  |	Encoding()
+  |	Source()
+  |	SchemaLocation()
+  |	XmlnsXs()
 }
 
-void Version() #Version : {}
+void AttributeFormDefault() #AttributeFormDefault : {}
 {
-    <VERSION> <ASSIGN> Value()
+    <ATTRIBUTEFORMDEFAULT> <ASSIGN> Value()
 }
 
-void RdfAttribute() : {}
+void Base() #Base : {}
 {
-    RdfAbout()
-	| RdfDatatype()
-	| RdfId()
-	| RdfParseType()
-	| RdfResource()
+    <BASE> <ASSIGN> Value()
 }
 
-void RdfAbout() #RdfAbout : {}
+void ElementFormDefault() #ElementFormDefault : {}
 {
-    <RDF_ABOUT> <ASSIGN> Value()
+    <ELEMENTFORMDEFAULT> <ASSIGN> Value()
 }
 
-void RdfDatatype() #RdfDatatype : {}
+void Encoding() #Encoding : {}
 {
-    <RDF_DATATYPE> <ASSIGN> Value()
+    <ENCODING> <ASSIGN> Value()
 }
 
-void RdfId() #RdfId : {}
+void Source() #Source : {}
 {
-    <RDF_ID> <ASSIGN> Value()
+    <SOURCE> <ASSIGN> Value()
 }
 
-void RdfParseType() #RdfParseType : {}
+void SchemaLocation() #SchemaLocation : {}
 {
-    <RDF_PARSETYPE> <ASSIGN> Value()
+    <SCHEMALOCATION> <ASSIGN> Value()
 }
 
-void RdfResource() #RdfResource : {}
-{
-    <RDF_RESOURCE> <ASSIGN> Value()
-}
-
-void XmlAttribute() : {}
-{
-    XmlBase()
-}
-
-void XmlBase() #XmlBase : {}
-{
-    <XML_BASE> <ASSIGN> Value()
-}
-
-void XmlnsAttribute() : {}
-{
-    Xmlns()
-	| XmlnsDaml()
-	| XmlnsDc()
-	| XmlnsOwl()
-	| XmlnsP1()
-	| XmlnsProtege()
-	| XmlnsRdf()
-	| XmlnsRdfs()
-	| XmlnsXsd()
-}
-
-void Xmlns() #Xmlns : {}
-{
-    <XMLNS> <ASSIGN> Value()
-}
-
-void XmlnsDaml() #XmlnsDaml : {}
-{
-    <XMLNS_DAML> <ASSIGN> Value()
-}
-
-void XmlnsDc() #XmlnsDc : {}
-{
-    <XMLNS_DC> <ASSIGN> Value()
-}
-
-void XmlnsP1() #XmlnsP1 : {}
-{
-    <XMLNS_P1> <ASSIGN> Value()
-}
-
-void XmlnsProtege() #XmlnsProtege : {}
-{
-    <XMLNS_PROTEGE> <ASSIGN> Value()
-}
-
-void XmlnsRdf() #XmlnsRdf : {}
+void Version() #Version : {}
 {
-    <XMLNS_RDF> <ASSIGN> Value()
+    <VERSION> <ASSIGN> Value()
 }
 
-void XmlnsXsd() #XmlnsXsd : {}
+void XmlnsXs() #XmlnsXs : {}
 {
-    <XMLNS_XSD> <ASSIGN> Value()
+    <XMLNS_XS> <ASSIGN> Value()
 }
 
-void XmlnsRdfs() #XmlnsRdfs : {}
-{
-    <XMLNS_RDFS> <ASSIGN> Value()
-}
 
-void XmlnsOwl() #XmlnsOwl : {}
-{
-    <XMLNS_OWL> <ASSIGN> Value()
-}
 
 void Value() #Value : { Token t; }
 {