2012-03-05 79 views
3

我正在爲一個相當複雜的XML文件格式編寫XSD。在許多方面,XML可以包含實際的文字值或產生該值的腳本。 (想想Excel中:42=21+21XSD:可以具有簡單內容或元素上下文的複雜類型

例如,指定大小,它應該是有效的寫以下任一操作:

<size>42</size> 
<size><script>2*21</script></size> 

我首先想到的是用<choice>成實現一個int或size元素中的腳本。然而,那麼我將不得不給這個字符串元素一個名字,導致一個笨拙的語法,如<size><value>42</value></size>。由於文字將比腳本使用得多,我不想誇大他們的語法。

任何想法如何在XSD中表示初始語法?

回答

4

我認爲有兩個不錯的選擇。

  1. 在這兩種情況下,請勿在<size>之內放置任何子元素。相反,您可以在size元素上設置'type'屬性,向消費者指示它是文字還是腳本。對複雜內容
  2. 使用這裏所描述的兩種技術(二者均基於使用「混合= true」特性:XML Schema: Element that can contain elements or text?

這些選項之間做出選擇,你會把自己在消費者應用程序的鞋,並決定最有可能獲得這些數據的方式。一般來說,如果主要消費者是開發人員將XML解析爲一次性集成任務(因爲輸出和XSD更多簡潔,在我看來更可讀);選項二可能更好,如果你看到一個XML工具消耗你的模式,因此如果有具體的元素解析出來,它可能更容易做一些特殊的事情。最終,儘管我只是猜測你的用例是什麼......

+0

我接受此答案,因爲它顯示最佳選項。但是,如果不使用混合內容來犧牲控制權,就不可能獲得我想要的確切語法。我終於選擇了size元素的兩個版本,每個版本都有不同的名稱。 – 2012-04-21 10:14:22

2

在XSD 1.0中,如果您不想更改XML實例的設計,唯一真正的選擇是聲明內容模型爲混合內容。

在XSD 1.1中,可以將其聲明爲混合內容,然後使用斷言來表示該元素必須具有元素子節點或文本節點子元素,但不能同時包含這兩個元素。

相關問題