【问题标题】:How do I declare attributes common to multiple elements?如何声明多个元素共有的属性?
【发布时间】:2013-12-16 23:37:49
【问题描述】:

我有多个元素要赋予这些属性:

<!ATTLIST [all these elements]
    width   CDATA   "0"
    height  CDATA   "0"
    margin  CDATA   "0 0 0 0"
    padding CDATA   "0 0 0 0"
    rotation CDATA  "0"
    halign  (left|center|right|full)    "center"
    valign  (top|middle|bottom|full)    "middle"
    >

这在 DTD 中是否可能,还是我必须手动完成?

(另外,虽然我在这里,但我认为以这种方式声明 marginpadding 属性并不是一个好主意。有人知道更好的方法吗?)

【问题讨论】:

    标签: dtd xml


    【解决方案1】:

    每个元素都需要有自己的attribute declaration (ATTLIST)。但是,您可以使用 parameter entity 来重用其中的大部分内容。

    示例...

    <!ENTITY % attrs 
        'width   CDATA   "0"
         height  CDATA   "0"
         margin  CDATA   "0 0 0 0"
         padding CDATA   "0 0 0 0"
         rotation CDATA  "0"
         halign  (left|center|right|full)    "center"
         valign  (top|middle|bottom|full)    "middle"'>
    
    <!ELEMENT elem1 (#PCDATA)>
    <!ATTLIST elem1 %attrs;>
    
    <!ELEMENT elem2 (#PCDATA)>
    <!ATTLIST elem2 %attrs;>
    

    这是另一个混​​合了参数实体引用以及仅出现在单个元素上的属性的示例。

    <!ELEMENT elem1 (#PCDATA)>
    <!ATTLIST elem1 
        attr1 CDATA #IMPLIED
        %attrs;              >
    
    <!ELEMENT elem2 (#PCDATA)>
    <!ATTLIST elem2 
        attr2 CDATA #IMPLIED
        %attrs;              >
    

    【讨论】:

    • @MichałKrzysztofFeiler - 看看oXygen XML Editor。它不是免费的,但值得每一分钱。他们还拥有评估许可证和学术许可证。
    • 看来不仅xmllint不接受这一点,而且在提供给Firefox或Chrome的XML中使用这些也会导致错误...... Firefox直接说这是一个非法的参数实体引用,Chrome给出的结果与xmllint 的结果更相似
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2014-10-19
    • 2018-12-17
    相关资源
    最近更新 更多