2014-10-29 59 views
0

我有這種結構的XML文件:驗證XML與必需和可選的屬性值

<add> 
<doc> 
<field name="url">an Url</field> 
<field name="title">a title</field> 
<field name="author">an author</field> 
</doc> 
[[<doc>...</doc>][<doc>..</doc>]] 
</add> 

因此,在每一個「文檔」有相同的元素「場」具有相同屬性的「名稱」,但與不同的可能值:「網址」,「標題」,「作者」。

我需要驗證我的文件,以便對於每個'doc'屬性值「url」是必需的,但同時屬性值「title」和「author」是可選的。問題是它們都屬於同一個屬性'name'。

有沒有辦法在DTD或XML Schema中做到這一點?

回答

1

如果您不能或不會重新設計您的XML以利用XML設計的優勢,您可能可以通過XSD 1.1中的斷言獲得某種驗證。

但最簡單的方法是重新設計你的XML:

<add> 
<doc> 
<url>an Url</url> 
<title>a title</title> 
<author>an author</author> 
</doc> 
[[<doc>...</doc>][<doc>..</doc>]] 
</add> 

現在你所描述的約束是微不足道的在任的DTD或XSD文件執行。

與大多數技術一樣,如果您使用XML工具而不是與之對抗,XML工具的工作效果會更好。

+0

你是對的,但那是我必須使用的程序所需的XML格式(Solr:https://wiki.apache.org/solr/UpdateXmlMessages#The_Update_Schema),所以我認爲我唯一能做的是創建一個定製的解析器來驗證該文件。謝謝 – user28791 2014-10-29 16:01:02

+0

處理外部數據源或數據接收器的一個簡單方法就是堅持設計嚴格的XML,這樣就可以在外部XML格式和可以在內部使用(並驗證)的更容易理解的XML格式之間創建一個簡單的無損轉換。所以:寫一個自定義的驗證器是你可以做的一件事情,但不是你能做的唯一事情。 – 2014-10-30 14:29:48