why a DTD?
Wait a second...first back up more...do you need to do validation? If not, you don't HAVE to define an XSD or DTD. Useful if the XMLs are all internal. (I still recommend the XSDs, but I know a number of companies that don't define their XMLs so that they can change them on the fly)
Then, if you're needing to to do validation, why not XSD?
Depending on what makes up an option/prices I might consider moving these to attributes.
Also, I'd probably go with the nested hierarchical. Cross-references are easier to generate DB-wise and all...but once you start leveraging the XML via XPath/XSLT, you'll find you want to add in new fields, whatever, and you'll get burned with the cross-references in long-term maintenance.