首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用外部DTD的内部子集DTD

引用外部DTD的内部子集DTD
EN

Stack Overflow用户
提问于 2020-09-18 09:52:40
回答 1查看 192关注 0票数 1

我有许多使用相同主文档类型定义(mrinitialman.dtd)的XML文档。某些元素会根据它们所在的页面进行小的调整:例如,SetPage元素,它是这样定义的:

代码语言:javascript
复制
<!ELEMENT SetPage ((SetImgInf|SetRecInf)?, SetPageName,SetPageDesc?,%credits;)>
            
            <!ELEMENT SetPageName (#PCDATA)>
            <!ELEMENT SetPageDesc (#PCDATA)>

这个文档类型定义中没有定义SetImgInf和SetRecInf;它们是在需要这些元素的文件的doctype子集中定义的。

例如,recordings.xml对于文档类型声明具有这样的功能:

代码语言:javascript
复制
<!DOCTYPE MainPage SYSTEM "../Site_Data/XML_Etc/mrinitialman.dtd"[
    <!ELEMENT SetRecInf EMPTY>
    <!ATTLIST SetRecInf recfile CDATA #REQUIRED>
]>

我在那里定义SetRecInf,因为它是唯一使用该元素的文件。

但是,有两个文件使用SetImgInf: art_gallery.xml和photo_gallery.xml;它们的doctype如下:

代码语言:javascript
复制
<!DOCTYPE MainPage SYSTEM "../Site_Data/XML_Etc/mrinitialman.dtd" [
    <!ELEMENT SetImgInf EMPTY>
        <!ATTLIST SetImgInf
            imgkeywords CDATA   #IMPLIED
            imgfile     NMTOKEN #REQUIRED
            imgformat (jpg|gif|png|tff|bmp) #IMPLIED 
            thumbformat (jpg|gif|png|tff|bmp) #IMPLIED
        >

]>

是否有可能将该位放入自己的DTD中,从而使art_gallery.xml和photo_gallery.xml能够有效地引用两个独立的外部文档类型定义?

EN

回答 1

Stack Overflow用户

发布于 2020-09-19 07:24:38

在XML (和SGML)中,可以将任何标记声明放入外部实体,然后引用该外部实体。在你的例子中,你会

代码语言:javascript
复制
<!ELEMENT SetImgInf EMPTY>
<!ATTLIST SetImgInf
        imgkeywords CDATA   #IMPLIED
        imgfile     NMTOKEN #REQUIRED
        imgformat (jpg|gif|png|tff|bmp) #IMPLIED 
        thumbformat (jpg|gif|png|tff|bmp) #IMPLIED
    >

转换为setimginf.dtd (例如),然后更改参数实体声明和后续引用使用该片段的位置:

代码语言:javascript
复制
<!ENTITY % setimginf SYSTEM "setimginf.dtd">
%setimginf;

从技术上讲,使用外部子集(如示例中的)

代码语言:javascript
复制
<!DOCTYPE MainPage SYSTEM
  "../Site_Data/XML_Etc/mrinitialman.dtd" [
  <!ELEMENT SetImgInf EMPTY>
]>

等于

代码语言:javascript
复制
<!DOCTYPE MainPage [
  <!ELEMENT SetImgInf EMPTY>
  <!ENTITY % mrinitialman SYSTEM
    "../Site_Data/XML_Etc/mrinitialman.dtd">
  %mrinitialman;
]>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63953436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档