2017-05-10 90 views
1

無法包裹我的頭 - 爲什麼xmllint抱怨這個dtd語法,具體爲et_snote一行。 - 我在這裏做錯了什麼?這個dtd語法有什麼問題?

<!ELEMENT et_snote (is_required?, (#PCDATA | vis? | ri?)*) > 
<!ELEMENT is_required (#PCDATA) > 

我得到這個錯誤:

schema.dtd:166: parser error : expected '>' 
<!ELEMENT et_snote (is_required?, (#PCDATA | vis? | ri?)+) > 

這是命令我運行:

xmllint --noout --nowarning --nonet --dtdvalid schema.dtd my.xml 

回答

2

您已經聲明爲元素含量的et_snote類型,其定義cannot have character data,要麼擺脫#PCDATA或將類型更改爲混合內容。

+0

我不介意聲明混合內容 - 卜我將如何確保'is_required'標籤永遠是第一要素下'et_snote' ? – Dannyboy

+0

你不能,如果你想指定一個訂單,你不能允許字符數據。如果必須的話,將字符數據包裹在另一個元素中。 – user657267

+0

le感嘆。謝謝! – Dannyboy

-1

我想你已經在使用或|時不允許使用類似?的東西。它也沒有意義,因爲你在說:「你可以使用這三個元素中的任何一個,但如果你使用第二或第三,你可以忽略它。」我假設你想讓這個可選的?and ri。因爲你給的替代品,並只想要一個元素,你可以說:

<!ELEMENT et_snode (is_required?, (#PCDATA | vis | ri)+) >