2010-10-15 66 views
2

我有一个XML文件被装载到数据库中。现在在xml的顶部有一个文档类型newfile。“DOCTYPE NEWFILE SYSTEM”是什么意思?

<!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片段包含DOCTYPE声明并且可以在验证时解析SYSTEM标识符,则直接对DTD进行验证。只需使用其中一个参数构造函数创建一个Validator对象。

+0

不确定关于'NEWFILE',所以我不会发表答案,但'SYSTEM'只是表示doctype声明文件是内部的而不是外部的(这将是'PUBLIC')。 – BoltClock 2010-10-15 10:48:08

回答

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提供本地缓存查找。除此之外还有一点,但这是基础知识。你的情况只有一个系统标识符。如果您使用的验证解析器(我怀疑您不是)正在验证您的文档是否针对DTD(此时文档类型为定义),它将使用此信息来搜索DTD本身。如果您没有目录(您几乎肯定没有),则应用程序将在实例文件本身的相同位置搜索“XXX_OUT_1234_YYMMDD_00.dtd”。如果你没有得到验证错误,它不会查找它,你可以安全地删除声明

如果你有这个内容的模式,那么DOCTYPE是相当多余的(有一些用途,当一个是使用实体,但你可能不是)。您几乎可以安全地将其删除,因为如果您在此过程中针对DTD进行验证,那么我将非常惊讶。

+0

这是一个很好的答案,谢谢。 – Andy 2010-10-15 12:38:56