2015-04-29 19 views
2

如果我嘗試和驗證以下XML:大量驗證失敗的類型爲xs:整數

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
     <Reference URI="#Id-6fa82551-828a-4d41-ab07-02f6887e32a1"> 
     <Transforms> 
      <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
     </Transforms> 
     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <DigestValue>YZR2p1r5yr4m5vO3ZiK51UCt0n4=</DigestValue> 
     </Reference> 
    </SignedInfo> 
    <SignatureValue>aPY/qeVV5nNCidTlEfB2uiUdg6UtRwRa2/Eqtmcg89P2RkIYl+n+WJ9LbnleGnLwvn8PDe24cRZqxesIFZEs4hVdzxFpFiMVLNaP4etER/k9fzZmcDS8OxtPgkRst6dS2hf2HJA3B2BCpMMCvSb2UAuTGMZAKFeLdfFZiFgCFm08iGLBQ54xML26f0vaOHLoF5fa0XPMq3OkAKwSHw9/mzpzUFGaaIdzj/qiHKJy5uxLEjMt4/FSu44rEHAxziHnyBo7CYsRK1SvwYUhxDEU+TqBOGvFTUqh8qCWzKkhgURjq5gwWd2qYrV7AXkcs5fXXxBH8w9Mnx7C1GHk05ssNQ==</SignatureValue> 
    <KeyInfo> 
     <X509Data> 
      <X509IssuerSerial> 
      <X509IssuerName>CN=sbsp3800jcc.office.sbs</X509IssuerName> 
      <X509SerialNumber>153921637767027919309545657592381534070</X509SerialNumber> 
      </X509IssuerSerial> 
     </X509Data>   
    </KeyInfo> 
</Signature> 

反對xmldsig-core-schema.xsd模式(可在互聯網上很容易找到),然後我得到了以下驗證錯誤:

Validation of current file using XML schema: 


ERROR: Element '{http://www.w3.org/2000/09/xmldsig#}X509SerialNumber': '153921637767027919309545657592381534070' is not a valid value of the atomic type 'xs:integer'. 

但是,我在互聯網上發現的很多帖子都讓我相信xs:integer類型應該支持無限數量的字符。那麼,我的驗證行爲是否行爲異常?我現在已經嘗試了兩種不同的驗證技術 - 首先是.NET System.Xml庫(XmlReader),其次是Notepad ++的XML插件。兩者都失敗並具有相同的信息。他們都錯了嗎?或者,實際上是否存在對xs:整數值可以採用的大小的限制?

+0

使用Xerces或Saxon-EE對我進行驗證非常合適。 –

+0

無法重現。您是否使用http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd? –

回答

4

xs:integerxs:decimal(沒有小數部分)的限制。該decimal spec

decimal has a lexical representation consisting of a finite-length sequence of decimal digits

所以理論上存在對數字的個數沒有限制。

該規範包含音符約被允許支持儘可能少的18位最低限度滿足處理器。 (你的整數有39個數字。)看起來你試過的處理器只是那些最低限度符合的處理器,而Xerces和Saxon-EE(根據Daniel Haley的評論)卻不是。

雖然規範說明這種處理器的數字限制應該是清楚地記錄在它似乎不是根據此forum post

順便說一句,你可以通過​​在線驗證。它驗證您的示例文檔。

+0

感謝您的回覆。儘管如此,它讓我有點卡住瞭解決方案。我還在SO上發現了另一篇文章,再一次沒有「乾淨」的解決方案,其他改變xsd以將字段定義爲字符串,並執行自定義後模式驗證來驗證它是數字。 –