Even though the error message you quoted seems at odd with what I normally would anticipate, because from the structural point of view, it seems to comply with the dtd... correct me if I am wrong.
The error I might expect is the one right at the abc of hibernate, if I may say so, meaning an error
you should have encountered at a more rudimentary use of hibernate-mapping document.
The type attribute has a value of hibernate value type...
If you say type="string", it should be fine. If you say type="String" then it will be unrecognized. When you mean it is of
java type (java.lang.String), you shouldfully qualify it, namely, type="java.lang.String" which will be translated into type="org.hibernate.type.StringType" or short handed to type="string".
Whereas type="int" is fine and you should encounter similar complaint if you write type="Integer" rather than type="integer" or type="java.lang.Integer". Check it out on all the type attributes see if it is where the problem resides.