2011-05-02 63 views
3

我已經開始了一項工作,在該工作中給了我一些XML文件和一個DTD。他們工作正常,但我注意到在DTD中,他們正在重複使用這樣的元素。重複使用DTD中的元素

DTD:

<!ELEMENT image EMPTY> 
    <!ATTLIST image 
     source CDATA #REQUIRED 
     signature (true|false|1|0) "false" 
    > 

,並在XML中的圖像元素出現在兩塊地,但只有地方之一要求「簽名」屬性,在其他情況下,它是無關緊要的。

XML:

<root> 
    <element-with-optional-signature-image> 
    <image source="1.jpg" singature="true" /> 
    <image source="2.jpg" /> 
    </element-with-optional-signature-image> 
    <other> 
    <image source="3.jpg" /> 
    </other> 
</root> 

我以前從來沒見過,只是這樣寫的,如果想知道一個DTD其共同的或這樣做的一個非常糟糕的方式嗎?我會創建兩個不同的元素element-imageother-image

編輯 -

是一樣接受了上面說的這樣的DTD:

<!ELEMENT element-image EMPTY> 
    <!ATTLIST element-image 
     source CDATA #REQUIRED 
     signature (true|false|1|0) "false" 
    > 

<!ELEMENT other-image EMPTY> 
    <!ATTLIST image 
     source CDATA #REQUIRED 
    > 

與XML這樣的:

<root> 
    <element-with-optional-signature-image> 
    <element-image source="1.jpg" singature="true" /> 
    <element-image source="2.jpg" /> 
    </element-with-optional-signature-image> 
    <other> 
    <other-image source="3.jpg" /> 
    </other> 
</root> 

回答

3

我認爲重用這樣的元素是個好主意。它使XML簡單而不那麼冗長。

在這種情況下,我認爲創建一個新的元素會是矯枉過正,因爲它不需要使用可選屬性。

0

在這個DTD,簽名屬性不需要。源屬性是。

+0

是的,我知道。我只是想知道重用像這樣的元素和隱含的簽名屬性是否是個好主意,儘管'other-image'不需要/永遠不需要它來處理系統的其他部分。或者做出兩個不同的元素會更好/更安全,請參閱編輯 – 2011-05-02 03:43:26

+1

好的。在這種情況下,我同意其他答案。不,現在很好。 – 2011-05-02 08:39:30