在XSD級別,我可以根據文檔中是否存在另一個元素來定義元素要求?XSD和元素存在要求或其他選項
例如,我想要求元素<firstname />
在<id />
元素也存在時提供,否則第一個名稱是可選的。
如果這不能在XSD級別執行,那麼我是否應該使這兩個元素是可選的,並通過不同級別的檢查強制執行要求?
歡迎選擇。
在XSD級別,我可以根據文檔中是否存在另一個元素來定義元素要求?XSD和元素存在要求或其他選項
例如,我想要求元素<firstname />
在<id />
元素也存在時提供,否則第一個名稱是可選的。
如果這不能在XSD級別執行,那麼我是否應該使這兩個元素是可選的,並通過不同級別的檢查強制執行要求?
歡迎選擇。
這不能在XSD級別執行。
使這兩個元素是可選的,並在應用程序體系結構中的不同級別執行需求聽起來像是一個很好的選擇。
下面是一個在DTD中完成的例子。 (注意:使用氧XML編輯器(這是使用的Xerces)試驗實例進行了驗證)
DTD(test.dtd)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT user ((firstname?|(firstname,id)),lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT id (#PCDATA)>
下面是一些示例XML實例(有效和無效) :
有效
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<firstname/>
<id/>
<lastname/>
</user>
無效
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<id/>
<lastname/>
</user>
有效
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<firstname/>
<lastname/>
</user>
我不認爲這可以用XSD來完成(如pmartin說的),但它可以用DTD來完成。讓我知道你是否感興趣,我會發佈一個例子。 – 2011-03-04 20:20:46
@DevNull:當然,繼續併發佈一個DTD的例子,因爲我的問題標題要求選項,並且這種信息對未來的訪問者很有用。我用「歡迎選項」修改了問題文本,以加強標題。謝謝。 – 2011-03-04 20:41:41