"DOCTYPE NEWFILE SYSTEM"是什么意思?

And*_*ndy 2 c# xml doctype

我有一个XML文件,它被批量加载到数据库中.现在在xml的顶部有一个doctype newfile.

<!DOCTYPE NEWFILE SYSTEM "XXX_OUT_1234_YYMMDD_00.dtd">
Run Code Online (Sandbox Code Playgroud)

我想知道的是它的用途以及是否需要它.使用模式和文件名将数据加载到带有C#批量上传器的SQL中(我在下面列出了基础知识,还有很多步骤,但我认为它并不相关.)

SQLXMLBulkLoad3Class objBL = new SQLXMLBulkLoad3Class();
objBL.Execute (schema,filename);
Run Code Online (Sandbox Code Playgroud)

模式文件的名称类似于XXX_OUT_1234_090700_06.xsd,类似于Doctype.

现在的原因是doctype将被删除,我不确定它是否真的有用.我环顾四周,但大多数doctypes用于网站(这是一个旧的Windows窗体应用程序.)我找到的大多数信息如下所示,我想知道doctype在这种情况下做了什么.

如果XML片段包含具有可在验证时解析的SYSTEM标识符的DOCTYPE声明,则可以直接验证DTD.只需使用单个参数构造函数之一创建Validator对象.

Nic*_*son 5

好问题.大多数人只是忽略了DOCTYPE语句的实际内容:)

文档类型声明的(基本)语法是

<!DOCTYPE root-element PUBLIC "publicID" SYSTEM "systemID">
Run Code Online (Sandbox Code Playgroud)

公共标识符是可选的,因此您也可以说:

<!DOCTYPE root-element SYSTEM "systemID">
Run Code Online (Sandbox Code Playgroud)

在这两个中,后面的标记DOCTYPE是包含此声明的XML或SGML文档的根元素的名称.所以...

<!DOCTYPE NEWFILE SYSTEM "XXX_OUT_1234_YYMMDD_00.dtd">
<NEWFILE>
...
</NEWFILE>
Run Code Online (Sandbox Code Playgroud)

PUBLIC和SYSTEM标识符都引用此实例文档的DTD.SYSTEM标识符可用于查找包含DTD的物理文件.PUBLIC标识符通常与目录一起使用,以便为DTD提供本地缓存的查找.除此之外还有更多内容,但这是基础知识.在您的情况下,只有一个SYSTEM标识符.如果你使用的验证解析器(我怀疑你不是)正在根据DTD验证你的文档(文档类型定义)这次)它会使用这些信息来搜索DTD本身.如果您没有目录(几乎肯定没有),应用程序将在与实例文件本身相同的位置搜索"XXX_OUT_1234_YYMMDD_00.dtd".如果您没有收到验证错误,则不会查找它,您可以安全地删除声明

如果你有这个内容的模式,那么DOCTYPE是相当多余的(当一个人使用实体时有一些用途,但你可能没有).您几乎肯定可以安全地删除它,因为如果您在该过程中验证DTD,我会非常惊讶.