2014-02-14 43 views
0

我想創建一個DTD的XML文件,但在Netbeans它不會給我任何錯誤,但在氧氣XML它聲明 意外的元素「childone」 。父元素類型的內容必須匹配「((c:childone,c:childtwo)|(childone,childtwo,childthree,childfour))」。DTD錯誤在氧氣但不是在Netbeans如此混淆

的XML我有如下:

<rootelement> 
    <c:childone></c:childone> 
    <c:childtwo></c:childtwo> 
    <childone></childone> 
    <childtwo></childtwo> 
    <childthree></childthree> 
    <childfour></childfour> 
</rootelement> 

的DTD我有如下:

<!ELEMENT rootelement ((c:childone,c:childtwo)|(childone,childtwo,childthree,childfour))> 
<!ELEMENT c:childone (#PCDATA)> 
<!ELEMENT c:childtwo (#PCDATA)> 
<!ELEMENT childone (#PCDATA)> 
<!ELEMENT childtwo (#PCDATA)> 
<!ELEMENT childthree (#PCDATA)> 
<!ELEMENT childfour (#PCDATA)> 

我現在很困惑,請大家幫忙。希望我正確地格式化了這個。

回答

1

DTD表示<rootelement>的內容可以是兩種形式之一;你的實際文件包含它們兩個。選擇一個,或更改DTD。

我懷疑Netbeans根本沒有驗證,因此沒有注意到問題。

順便說一句,DTD非常不適合使用命名空間文檔 - 我當然希望你已經將c:前綴綁定到命名空間! - 所以我強烈建議切換到XML Schemas,它是DTD更強大的替代品。

+0

我實際上正在創建一個DTD和模式。但是我先創建了DTD,然後是模式。 c:是命名空間的前綴。我還在學習。我以爲我可以有一個「或」來選擇帶有c的前綴的那個或者沒有在DTD中的那些,但顯然不是。 – Dino

+0

或者是兩個不同的內容集之間。正如你寫的那樣,你可以有一個集(前綴)或另一個集(非前綴),但不能同時存在。如果你想讓混合,語法必須這樣說。 除非你有一個非常具體的理由來處理它們,這些天我會跳過DTD。 – keshlam

+0

啊我看到技術上我的DTD必須改變,否則我必須刪除其中一個元素,或者是前面的元素,或者是之前沒有的元素。 – Dino