我有一个XML文件,它被批量加载到数据库中。现在在xml的顶部有一个doctype newfile。
<!DOCTYPE NEWFILE SYSTEM "XXX_OUT_1234_YYMMDD_00.dtd">
我想知道的是它的用途以及是否需要它。使用模式和文件名将数据加载到带有C#批量上传器的SQL中(我在下面列出了基础知识,还有很多步骤,但我认为它并不相关。)
SQLXMLBulkLoad3Class objBL = new SQLXMLBulkLoad3Class();
objBL.Execute (schema,filename);
模式文件的名称类似于XXX_OUT_1234_090700_06.xsd,类似于Doctype。
现在的原因是doctype将被删除,我不确定它是否真的有用。我环顾四周,但大多数doctypes用于网站(这是一个旧的Windows窗体应用程序。)我发现的大多数信息如下所示,我想知道doctype在这种情况下做了什么。
如果XML片段包含具有可在验证时解析的SYSTEM标识符的DOCTYPE声明,则可以直接验证DTD。只需使用单个参数构造函数之一创建Validator对象。
答案 0 :(得分:5)
好问题。大多数人只是忽略了DOCTYPE语句的实际内容:)
文档类型声明的(基本)语法是
<!DOCTYPE root-element PUBLIC "publicID" SYSTEM "systemID">
公共标识符是可选的,因此您也可以说:
<!DOCTYPE root-element SYSTEM "systemID">
在这两个中,DOCTYPE
后面的标记是包含此声明的XML或SGML文档的根元素的名称。所以......
<!DOCTYPE NEWFILE SYSTEM "XXX_OUT_1234_YYMMDD_00.dtd">
<NEWFILE>
...
</NEWFILE>
PUBLIC和SYSTEM标识符都引用此实例文档的DTD。 SYSTEM标识符可用于查找包含DTD的物理文件。 PUBLIC标识符通常与目录一起使用,以便为DTD提供本地缓存的查找。除此之外还有更多内容,但这是基础知识。在您的情况下,只有一个SYSTEM标识符。如果您使用的验证解析器(我怀疑您不是)正在根据DTD(文档类型定义)验证您的文档,它将使用此信息来搜索DTD本身。如果您没有目录(几乎肯定没有),应用程序将在与实例文件本身相同的位置搜索“XXX_OUT_1234_YYMMDD_00.dtd”。如果您没有收到验证错误,则不会查找它,您可以安全地删除声明
如果你有这个内容的架构,那么DOCTYPE是相当多余的(当有人使用实体时有一些用途,但你可能没有)。您几乎可以肯定地安全删除它,因为如果您在此过程中验证DTD,我会非常惊讶。