ENTITY
ENTITY
陳述式可用於定義 DTD 中的實體,以供與 DTD 關聯的 XML 文件與 DTD 本身使用。ENTITY 可提供縮寫的項目以存放在您的 XML 文件中。縮寫名稱可讓您提供給名稱參數使用。ENTITY 對於可儲存在個別檔案中的重複資訊或大型文字區塊,都有非常大的用處。在 XML 文件中,縮寫名稱後面會接著一個 ; (&abbName;)。
在 DTD 與 XML 檔案中使用的 ENTITY 範例如下所示。
longtext.txt
下面是 longtext.txt 的內容:
<definition>ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.
</definition>
dtd_chunk.dtd
sample.dtd
當您剖析 DTD 文件時,就會取得下列結果。請注意,這項取代作業只會在記憶體中執行。剖析器實際上並未變更檔案。
sample.xml
已剖析的 XML 文件的結果
當您剖析 XML 文件時,就會取得下列結果:
Definition list for eXtensible Markup Language attributes used in DTD files.
top file
ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.
Conclusion of definition list for eXtensible Markup Language attributes.
語法
<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >
參數
- name
實體的名稱。所有實體定義都必須具備。
- publicID
實體的公開識別項。只有宣告使用 PUBLIC 關鍵字時,才需使用。
- resource
實體的值。所有實體定義都必須具備。在內部實體的案例中,這是會進行剖析與展開的文字字串。在外部實體的案例中,可用於識別檔案名稱或檔案型別等外部實體的則是統一資源識別元 (URI)。
- notation
使用 NOTATION 陳述式在 DTD 的其他位置上宣告的標記法名稱。只有在使用非 XML 資料 (NDATA) 關鍵字來宣告未剖析的實體時,才需要使用。
範例
一般實體 (內部剖析)
下列項目宣告的內部一般實體可當做使用 DTD 之 XML 文件中的 öaut;
與 &xml;
來參考。
<!ENTITY oumlaut "&#246;">
或簡單文字替代範例為
<!ENTITY xml "eXtensible Markup Language">
XML 剖析器會展開原始實體值 (&#246;) 使其成為內部 XML 文件的一部分。在最終的剖析文件輸出中,"&" 值會用於建立 "&" 字元,且該值會出現在 XML 文件中做為 "ö"。
參數實體 (內部剖析)
下列項目宣告的內部參數實體可當做 DTD 其他位置中的 %lists;
來參考。如此可讓 XHTML 清單項目、<ul>
與 <ol>
被重複參考。
<!ENTITY % lists "ul | ol">
未剖析的外部實體
以下宣告的未剖析外部實體,可讓您編碼非 XML 資料的連結 (在此案例中,為 GIF 格式的影像檔案),以納入您的 XML 文件中。
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
在這個情況下,若要使用 NDATA
關鍵字,則 "jpg" 標記法的 NOTATION
宣告也必須與此宣告一起使用。如需詳細資訊,請參閱標記法。
備註
ENTITY 可透過多種方式使用。若您不確定如何定義實體以供使用,下列問題或許可協助您進一步了解,在各種不同的狀況下,應如何使用您在 DTD 中所宣告的實體:
實體的值是否只是用於縮小在文件使用時限中可能變更的大型文字字串?若是,請使用一般實體。
是否將它做為 DTD 或 XML 文件外部某些項目的資料指標 (也就是外部實體),像是檔案名稱或 MIME 型別?若是,請使用未剖析的外部實體。
實體的 URI 值應進行剖析 (亦即,展開做為 DTD 或使用 DTD 之 XML 文件的一部分),還是保留為不剖析 (亦即,XML 剖析器會從最終剖析的文件中省略其內容)?
若已剖析,展開的實體內容應成為使用 DTD 之 XML 文件的一部分 (也就是一般實體),還是應成為 DTD 本身的一部分 (也就是參數實體)?