	private IConstructor visitElement(Element e){
		TypeInfo typeInfo = e.getSchemaTypeInfo();
		java.lang.String typeName = typeInfo.getTypeName();
		Type adt = anonymousType;
		if(typeName != null){
			adt = tf.abstractDataType(typeStore, typeName);
		}
		NodeList childNodesList = e.getChildNodes();
		int nrOfChildNodes = childNodesList.getLength();
		List<Type> childrenTypesList = new ArrayList<Type>();
		childrenTypesList.add(ATTRIBUTES_NODE);
		childrenTypesList.add(STRING_TYPE);
		List<IValue> childrenList = new ArrayList<IValue>();
		childrenList.add(getAttributes(e));
		childrenList.add(DEFAULT_TEXT_CONTENT);
		for(int i = 0; i < nrOfChildNodes; i++){
			Node childNode =  childNodesList.item(i);
			if(childNode instanceof Element){ 
				Element c = (Element) childNode;
				IConstructor child = visitElement(c);
				childrenTypesList.add(child.getType());
				childrenList.add(child);
			}else{ 
				java.lang.String textContent = childNode.getNodeValue().trim();
				if(textContent.length() > 0){
					childrenList.set(1, vf.string(textContent));
				}
			}
		}
		int nrOfChildren = childrenTypesList.size();
		Type[] types = new Type[nrOfChildren];
		types = childrenTypesList.toArray(types);
		IValue[] children = new IValue[nrOfChildren];
		children = childrenList.toArray(children);
		java.lang.String name = e.getNodeName();
		Type consType = tf.constructor(typeStore, adt, name, types);
		return vf.constructor(consType, children);
	}

	private IConstructor visitElement(Element e){
		TypeInfo typeInfo = e.getSchemaTypeInfo();
		java.lang.String typeName = typeInfo.getTypeName();
		Type adt = anonymousType;
		if(typeName != null){
			adt = tf.abstractDataType(typeStore, typeName);
		}
		NodeList childNodesList = e.getChildNodes();
		int nrOfChildNodes = childNodesList.getLength();
		List<Type> childrenTypesList = new ArrayList<Type>();
		childrenTypesList.add(ATTRIBUTES_NODE);
		List<IValue> childrenList = new ArrayList<IValue>();
		childrenList.add(getAttributes(e));
		for(int i = 0; i < nrOfChildNodes; i++){
			Node childNode =  childNodesList.item(i);
			if(childNode instanceof Element){ 
				Element c = (Element) childNode;
				IConstructor child = visitElement(c);
				childrenTypesList.add(child.getType());
				childrenList.add(child);
			}else{ 
				java.lang.String textContent = childNode.getNodeValue();
				childrenTypesList.add(STRING_TYPE);
				childrenList.add(vf.string(textContent));
			}
		}
		int nrOfChildren = childrenTypesList.size();
		Type[] types = new Type[nrOfChildren];
		types = childrenTypesList.toArray(types);
		IValue[] children = new IValue[nrOfChildren];
		children = childrenList.toArray(children);
		java.lang.String name = e.getNodeName();
		Type consType = tf.constructor(typeStore, adt, name, types);
		return vf.constructor(consType, children);
	}
