XSD日期或无日期验证

时间:2010-06-10 18:04:28

标签: xml xslt xsd

以下似乎适用于MM-YYYY格式,但我现在有一个案例,它可以是空白或有日期。这是可能的,还是应该推送只在日期中包含XML属性并使属性可选?

<xs:attribute name="edition_date" use="required">  
<xs:simpleType>  
   <xs:restriction base="AT_STR">  
     <xs:length value="7"/>   
     <xs:pattern value="(0[1-9]|1[012])[-](19|20)\d\d"/>   
   </xs:restriction>   
</xs:simpleType>   

2 个答案:

答案 0 :(得分:2)

  

如果有日期,则只在XML中包含该属性,并使该属性成为可选

似乎对我来说是正确的选择

答案 1 :(得分:0)

使属性成为可选属性,并且如果存在日期,则仅在XML中包含属性是一个不错的选择,但在某些情况下,您可能无法控制XML的生成。在这种情况下,您可以在XSD中尝试以下模式

<xs:simpleType name="edition_date">   
   <xs:restriction base="xs:string">   
      <xs:maxLength value="7"/>
      <xs:pattern value="((0[1-9]|1[012])[-](19|20)\d\d)?"/>    
   </xs:restriction>    
</xs:simpleType>    

这是与你的类似的模式,但使用的?运算符表示模式可以出现零次或一次,因此将允许空字符串。另请注意使用xs:maxLength而不是xs:length。不需要那个位,因为模式只允许固定长度。