2012-01-24 50 views
2

在xml中,根據規範內置ID IDREF和IDREFS類型。如果每個IDREF值都沒有相應的ID值,那麼IDREF和IDREFS應該直接與ID值綁定,並且架構驗證應該失敗。有沒有辦法在java中生成xsd:ID值?

在我推出自己的產品之前,我想知道java(或apache)是否已經創建了一些用於創建ID格式的ID值。如果你不熟悉規範ID值必須遵守同樣的規則XML標記名稱做:

[4]  NameStartChar  ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 
[4a] NameChar   ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
[5]  Name    ::= NameStartChar (NameChar)* 

生成UUID幾乎會讓我們有,但以數字開始的UUID會產生問題。很明顯,一個簡單的實現會在GUID前加上任何NameStartChar值。本着標準化的精神,是否有任何常用的功能?

+0

在什麼範圍內你需要這些是獨一無二的? XML只是要求它們在文檔中是唯一的。如果這就是你所需要的,UUID是矯枉過正的 - 只需要使用具有前綴的連續數字。在故障排除時他們會更容易處理 - 比「550e8400-e29b-41d4-a716-446655440000」更容易記住「42」。 –

回答

0

我通常只用一些前綴+一個連續的數字來遞增。 UUID是全局唯一的,在一個文檔中,當保持整數唯一時,確保"customprefix"+integer是唯一的。

1

我還沒有找到一個 - 但你可以做這樣的事情:

public static String generateId() { 
    long now = System.currentTimeMillis(); 
    long randomLong = random.nextLong(); 
    return ("ID_" + now + "-" + randomLong); 
} 
1

你也可以使用UUID類。

String id = "id_" + UUID.randomUUID().toString(); 
相關問題