Для 1. до 3. ответ прост: просто используйте символы, которые вы хотите видеть в имени узла, т.е. экранируйте любую входную строку, которая у вас есть (например, заголовок записи в блоге), с ограниченным набором символов, таким как тот, что для URI .
Например, не разрешайте пробелы (которые разрешены для имен узлов JCR, но могут привести к появлению уродливых %20
в URL) и другие символы, которые должны быть закодированы в URL. Вы можете удалить эти символы или просто заменить их подчеркиванием, поскольку в большинстве случаев это выглядит хорошо.
Что касается уникальных имен (4.) , вы можете указать текущее время, вкл. миллисекунды или вы явно проверяете наличие коллизий. Первый может показаться немного уродливым, но, вероятно, никогда не подведет для сценария блога. Последнее можно сделать, реагируя на выброшенное исключение, если узел с таким именем уже существует, и добавив, например,. инкрементный счетчик и повторите попытку (например, my_great_post1
, my_great_post2
и т. д.). Вы также можете заблокировать родительский узел, чтобы фактически только один сеанс мог одновременно добавить узел, что позволяет избежать пробного цикла, но за счет блокировки.
Примечание: //content[@node_name=some-name]
не является допустимым запросом JCR Xpath. Вы, вероятно, хотите использовать /jcr:root/content//some-name
для этого.