When using DatatypeDocumentFactory, I was surprised to find that named simple type definitions are only considered valid if nested. As far as I can tell there's no reference to this in the documentation. Have I overlooked something and, if not, are there any plans to address this restriction?
// When doing this: setDocumentFactory(DatatypeDocumentFactory.getInstance()); Dom4J's SchemaParser considers this to be valid: <!----------------------------------------------> <xs:complexType name="NamedAttributeTesterType"> <xs:sequence> <xs:element name="foo" type="xs:string" minOccurs="0"/> </xs:sequence> <xs:attribute name="kind" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="element"/> <xs:enumeration value="list"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> <!----------------------------------------------> But not this: <!----------------------------------------------> <xs:simpleType name="NamedAttributeType"> <xs:restriction base="xs:string"> <xs:enumeration value="element"/> <xs:enumeration value="list"/> </xs:restriction> </xs:simpleType> <xs:complexType name="NamedAttributeTesterType"> <xs:sequence> <xs:element name="foo" type="xs:string" minOccurs="0"/> </xs:sequence> <xs:attribute name="kind" type="NamedAttributeType" use="required"/> </xs:complexType> <!----------------------------------------------> While I'm not crazy about the restriction, I can do something about it in my own schemas. Unfortunately it creates a problem when I'm attemting to reference named types declared in other schemas. For example: <!----------------------------------------------> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> <xs:complexType name="ReferencedAttributeTesterType"> <xs:sequence> <xs:element name="foo" type="xs:string" minOccurs="0"/> </xs:sequence> <xs:attribute ref="xml:base"/> </xs:complexType> <!----------------------------------------------> // Failure occurs here. Comments mine protected XSDatatype dataTypeForXsdAttribute( Element xsdAttribute ) { String type = xsdAttribute.attributeValue( "type" ); XSDatatype dataType = null; // named type returns NamedAttributeTesterType and // then never checks simpleType if ( type != null ) { dataType = getTypeByName( type ); } else { // only alternative is to next the type definition // then it works. Element xsdSimpleType = xsdAttribute.element( XSD_SIMPLETYPE ); if ( xsdSimpleType == null ) { String name = xsdAttribute.attributeValue( "name" ); throw new InvalidSchemaException( "The attribute: " + name + " has no type attribute and does not contain a <simpleType/> element" ); } dataType = loadXSDatatypeFromSimpleType( xsdSimpleType ); } return dataType; } ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! http://www.vasoftware.com _______________________________________________ dom4j-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-user