2012-01-24 8 views
2

xmlには、ID IDREFおよびIDREFSタイプが仕様に組み込まれています。 IDREFとIDREFSはID値に直接結びついていると考えられ、すべてのIDREF値に対応するID値がない場合、スキーマの検証は失敗します。私は自分をロールバックする前にすでにJavaでxsd:ID値を生成する方法はありますか?

、私は、java(またはApache)あればと思いまして、既にIDのフォーマットに準拠ID値を作成するために作成したものを持っています。あなたが同じルールのXMLタグ名に準拠している必要がありスペックID値に慣れていない場合に実行します。

[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が問題を引き起こします。明らかに、シンプルな実装では、任意のNameStartChar値をguidの前に付けます。標準化の精神の中で、これに共通して使用される機能はありますか?

+0

これらは一意である必要がありますか? XMLは、それらがドキュメント内で一意であることを要求するだけです。それが必要なのであれば、UUIDは過剰です。接頭辞付きの連番を使用してください。トラブルシューティングの際に対処しやすくなります。 "42"は "550e8400-e29b-41d4-a716-446655440000"よりも覚えやすいです。 –

答えて

0

私は通常、ある接頭辞+連番I増分を使用します。 UUIDはグローバルにユニークです。文書内では、整数を一意に保つときに"customprefix"+integerがユニークであることを保証するのは簡単です。私は1つを発見していない

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(); 
関連する問題