2011-01-20 67 views
1

我有一個屬性:如何驗證屬性如果存在於DTD中不爲空?

preprocessFile CDATA #IMPLIED 

我想這個屬性是:

  1. 允許缺席
  2. 如果存在的話,一個非空字符串

哪有我用DTD表達了這一點?爲了儘量減少爭論,請假設我知道rng/xsd,並且不能將它們用於此特定任務。

回答

2

使用XML DTD無法驗證如果存在屬性,它不能爲空。

這裏是你的選擇:

  1. 您可以設置一個默認值。例如preprocessFile CDATA "novalueprovided"
  2. 您可以允許它不存在(請參閱上面的示例)。

無論哪種情況,您都可以在XML解析代碼中強制該屬性爲「缺席或不存在」(如果存在)。

1

我同意DwB,這超出了DTD,即使有了上述建議,仍然可以明確指定空字符串。但是由於DTD也不允許數據類型規範,所以這符合圖片的要求,因爲您不僅要求字符串數據類型,還要限制長度。當然,像RNG(RelaxNG)或XML:Schema等任何真正的模式語言都很容易支持這樣的檢查,這裏給出的RNG:

<optional> 
    <attribute name="preprocessFile"> 
     <data type=string"> 
      <minLength value="1"/> 
     </data> 
    </attribute> 
</optional>