簡體   English   中英

XSD:可以包含簡單內容或元素上下文的復雜類型

[英]XSD: Complex type that can have either simple content or element context

我正在為一個相當復雜的XML文件格式編寫XSD。 在許多方面,XML可以包含實際的文字值或產生值的腳本。 (想想Excel: 42 vs. =21+21

例如,要指定大小,寫入以下任一項應該是有效的:

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

我的第一個想法是使用<choice>來允許在size元素中使用int或script。 但是,我必須給字符串元素一個名稱,導致一個笨拙的語法,如<size><value>42</value></size> 由於文字的使用頻率遠遠超過腳本,因此我不想誇大它們的語法。

有關如何在XSD中表達初始語法的任何想法?

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

  1. 在任何一種情況下都不要在<size>內放置任何子元素。 相反,您可以在size元素上設置'type'屬性,向消費者指示它是文字還是腳本。
  2. 使用這里描述的兩種技術之一(都基於在complexContent上使用'mixed = true'屬性: XML Schema:可以包含元素或文本的元素?

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

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

在XSD 1.1中,您可以將其聲明為混合內容,然后使用斷言來表示元素必須具有元素子元素或文本節點子元素,但不能同時具有兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM