2015-03-19 93 views
1

我相信XSD 1.1具有允許條件邏輯的斷言。根據使用xsd的另一個元素使元素可選/強制:assert

我有這樣一個模式:

 <xs:element minOccurs="0" maxOccurs="1" name="Type" type="xs:integer" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="Comment" type="xs:string" /> 

我想Comment部分是強制性只有當Type是0。如果Type爲別的,我想Comment元素是可選的。

如何使用斷言實現此目的?

回答

4
test="not(Type=0 and not(Comment))" 
+0

正確但可還原:'Comment or Type!= 0'。 – kjhughes 2015-03-19 12:26:43

+0

這是可以減少的,但不是這樣。我認爲'Comment or not(Type = 0)'是正確的,假設我們讀到「Type is other else」來包含它不存在的情況。 – 2015-03-19 14:56:47

+0

啊,是的,我認爲你是對的。例如,當'Comment'和'Type'都不存在時,'Comment或Type!= 0'失敗,但'Comment or not(Type = 0)'成功,這可能是需要的。 – kjhughes 2015-03-19 15:21:58

2

信用:邁克爾·凱,喬治·布爾和奧古斯都德·摩根。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
      vc:minVersion="1.1"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="Type" type="xs:integer" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="Comment" type="xs:string" /> 
     </xs:sequence> 
     <xs:assert test="Comment or not(Type = 0)"/> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 
相關問題