2010-10-15 64 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