从 DTD 文件制作 MySQL 表的问题
我有一个 dtd 文件,它描述了我的列应该有哪些列。
问题是,它没有提供有关我应该为列使用什么数据类型的信息,即是 INT、Varchar 还是 Text,也没有提供有关列的最大长度的信息。在大多数地方它都写着#PCDATA
,我相信这只是意味着混合数据。
有没有办法让我找出应该使用的数据类型和最大长度,或者我应该简单地制作一个充满 Varchar (255)
的表?
I have a dtd file which describes what columns my columns should have.
The problem is, it gives no info on what data type I should use for the columns, i.e whether INT, Varchar, or Text, and no info on the max length of the columns. In most places it says #PCDATA
which I believe simply means mixed data.
Is there a way for me to find out what data type and max lenghts I should use, or should I simply make a table full of Varchar (255)
s?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
众所周知,SGML 缺乏类型系统,因此没有机械化的方法来推断任何类型元素的正确类型。请注意,
#PCDATA
并不意味着“混合数据”,而是“已解析的字符数据”——内容为#PCDATA
的元素不得包含任何其他元素,但它可以包含实体引用(在 SGML 中,它受到包含/排除例外的影响,但 XML 中不存在这些例外)。 “混合内容”类似于(element1 | #PCDATA)
,将其转换为数据库模式要困难得多。最好的选择是从元素类型名称或 DTD 中有用的注释推断出内容类型,和/或检查一系列文档以观察其使用模式。
SGML is (in)famously lacking a type system, so there is no mechanized way to infer the correct type for any sort of element. Note that
#PCDATA
doesn't mean "mixed data", but "parsed character data" -- an element with content#PCDATA
mustn't contain any other elements, but it can contain entity references (and in SGML it is subject to inclusion/exclusion exceptions, but those are not present in XML). "Mixed content" is something like(element1 | #PCDATA)
, which would be a lot harder to translate into a database schema.Your best bet is to either deduce the content type from the element type names or from helpful comments in the DTD, and/or to inspect a series of documents in observe their usage pattern.