2013-06-20 35 views
0

是否有可能限制當前日期的XSD日期和時間數據類型? 例如,如果你想約會的設置maxInclusive,便會爲當前日期:當前日期的XML模式限制

<xs:element name="DateOfBirths" type="birthsDate"/>  
<xs:simpleType name="birthsDate"> 
    <xs:restriction base="xs:date"> 
    <xs:minInclusive value="1920-01-01"/> 
    <xs:maxInclusive value="current-date()" fixed="true"/> 
    </xs:restriction> 
</xs:simpleType> 

如果每默認是不可能的,沒有一種解決方法存在嗎?任何幫助,將不勝感激。

回答

1

XSD不支持在設置方面值時調用XPath函數,因此(因爲您大概已經知道)問題中的代碼無法工作。

最明顯的解決方法是

  • 使用XSD 1.1和檢查約束的斷言。
  • 使用Schematron並檢查斷言中的約束。
  • 檢查應用程序級別的約束。
  • 將birthDate類型的聲明移動到它自己的模式文檔中;定期生成該模式文檔的新版本,無論是手動還是使用cron作業或類似的東西。今天產生的模式文檔必須

    <xs:maxInclusive value="2013-06-20"/> 
    

    和未來產生模式文檔必須

    <xs:maxInclusive value="2013-06-21"/> 
    
+0

如果我想有當前日期加上下週的價值maxInclusive,便會?這是可能的XSD1.1斷言或Schematron呢? – FredFloete

+0

如果你可以計算出合適的日期,那麼是的。在XSD 1.1和Schematron中,當使用XPath 2.0作爲查詢語言時,日期算法相對簡單。在使用XPath 1.0的Schematron中,它可能不那麼簡單,也許不可能。 –