2012-01-24 4 views
2

В xml есть ID IDF и IDREFS, встроенные в спецификацию. IDREF и IDREFS должны привязываться непосредственно к значениям идентификатора, и проверка схемы должна завершиться неудачно, если каждое значение IDREF не имеет соответствующего значения ID.Есть ли способ генерировать значение xsd: ID в java?

Прежде чем я скачу свой собственный, мне было интересно, есть ли у Java (или apache) что-то уже созданное для создания значений идентификатора, которые придерживаются формата 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 являются излишними - просто используйте последовательные номера с префиксом. С ними легче справиться при поиске неисправностей - легче запомнить «42», чем «550e8400-e29b-41d4-a716-446655440000». –

ответ

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(); 
Смежные вопросы