在DTD中定义图像元素

时间:2014-04-15 12:56:35

标签: xml dtd xmetal

我为XMetal创建了一个特定的DTD,其中添加了图像元素。

图像元素的结构如下

<!ENTITY  % Attr-com
    "id ID #IMPLIED
    class NMTOKEN #IMPLIED
    type NMTOKEN #IMPLIED
    style CDATA #IMPLIED
    lang NMTOKEN #IMPLIED"
>

<!ELEMENT image EMPTY>
<!ATTLIST image  %Attr-com; 
            alt    CDATA    #IMPLIED
            href    CDATA   #REQUIRED
            keyref  NMTOKEN #IMPLIED
            border  CDATA   #IMPLIED
            height  CDATA   #IMPLIED
            width   CDATA   #IMPLIED
            align   CDATA   #IMPLIED
            scale   NMTOKEN #IMPLIED
            placement  (inline | break)        "inline"
            conref CDATA   #IMPLIED>

但这在Xmetal中不起作用。 Xmetal中的图像图标未突出显示。如果我使用元素列表中的图像元素,它将显示如下

<image/>

如何在Xmetal中使用此DTD,以便图像能够添加。

3 个答案:

答案 0 :(得分:0)

我没有在一个懒散的时间里使用XMetaL,但我仍然有一个安装,可以告诉你我是如何一直做图形的。

所有属性都是CDATA或NMTOKEN,因此XMetaL无法知道实际图像是什么。

我所做的是将其中一个属性设为ENTITY类型。这将使XMetaL查找名称与属性值匹配的实体声明。

该实体应声明为NDATA(符号数据)系统实体。您还需要确保声明符号。对于我的例子,我正在使用png。

这是我的DTD和XML的一个例子。

<强> DTD

<!NOTATION PNG PUBLIC "PNG 1.0" "image/png">
<!ELEMENT doc (p|image)+>
<!ELEMENT p (#PCDATA)>
<!ELEMENT image EMPTY>
<!ATTLIST image
    href ENTITY #REQUIRED>

<强> XML

<!DOCTYPE doc SYSTEM "test.dtd" [
<!ENTITY test.png SYSTEM "images/test.png" NDATA PNG>
]>
<doc>
<p>Test image:</p>
<image href="test.png"/>
</doc>

注意:我的XML有一个内部子集,其中包含我的图像的实体声明。您不必手动添加这些;你可以使用“工具” - &gt; XMetaL中的“图形实体......”:

enter image description here

这是我在XMetaL中打开的XML:

enter image description here

如果您注意到,我的光标位于image元素之后和doc结束标记之内。由于此位置允许image元素,因此工具栏中的图像按钮处于活动状态,并允许我添加新图像。如果我添加新图像,这就是它的样子:

enter image description here

要选择实际图像,您可以在“属性”检查器中编辑href属性。它是一个下拉列表,列出了您声明​​的所有可用实体。

希望这足以让你前进。如果没有让我知道什么仍然无效。

答案 1 :(得分:0)

通常,您可以使用CTM文件将XMetaL配置为识别DTD的图像元素,该文件是与DTD关联的XMetaL自定义的一部分。请注意,这是使用XML实体在XMetaL中表示图形的替代;使用CTM,不必使用实体和ENTITY属性类型。

有关于XMetaL的CTM文件的一般信息,请参见:
http://xmetal.com/tutorials/customizing_xmetal_manually.html
搜索“&lt; Images&gt;”在该页面上找到关于在XMetaL中识别图像类型的确切内容。

但是(在这里谈到具体问题),看起来好像在使用DITA。当您使用专门的DITA DTD时,XMetaL应该为您自动生成正确的CTM;您不需要自己编辑CTM。因此,您的问题可能实际上是XMetaL支持问题。

您似乎在XMetaL社区论坛上发布了类似的问题,而我们(我在JustSystems工作,XMetaL的制造商)一直在协助您进入该主题。在这一点上,我会让援助继续在那里:
http://forums.xmetal.com/index.php/topic,3355.0.html

答案 2 :(得分:0)

感谢您的回复。但在我的情况下,我在一个DTD中定义了n个元素以及图像元素。我能够在xmetal中看到图像元素,并且出现了十字符号。但是,如果我双击该图标,则不显示属性窗口。我认为这是一些引用Href的内容。但我不确定究竟是什么问题..