Я учусь писать программное обеспечение для блогов, поэтому я прочитал об Atom, который требует уникальный идентификатор. Похоже, то, что вы должны сделать, это urn: uuid: type IRI.
Для меня имеет смысл получить глобально уникальный идентификатор для хеширования содержимого поста.
Я написал код (см. Ниже) для генерации UUID, совместимого с rfc-4122 (версия 5), за исключением того, что я не уверен, что вставлять в пространство имен.
RFC говорит, что не может сказать, какое пространство имен мне следует использовать, и приводит несколько примеров, ни один из которых не кажется правильным. Я немного погуглил и не увидел никаких рекомендаций, кроме тех, которые содержатся в RFC.
Пространство имен само по себе должно быть UUID, поэтому я не должен просто вставлять что-то вроде "хеша всего поста" в качестве пространства имен.
Чтобы сгенерировать [все, кроме 6 бит] UUID версии 5, вы объединяете UUID пространства имен (в необработанном виде) со своим «именем».
Итак ... вот мой вопрос: существует ли UUID пространства имен для использования всего содержимого вашего документа в качестве «имени»?
Или я должен сделать случайный (v4) UUID и использовать его в качестве своего личного пространства имен «весь пост»?
Или что-то еще?
Спасибо, - Джейсон
P.S. Я написал генератор UUID для узла, который сейчас использует пространство имен ns: URL. Вот код, если вы заинтересованы:
// Copyright 2011 Jason Woofenden -- CC0
//
// An almost correct rfc-4122 v5 UUID generator for node (see http://node.js)
//
// To test, run this with node, then compare the out put of these:
//
// curl http://localhost:8129/foo
// uuid -v 5 ns:URL foo
//
// Replace "foo" with any string and they should still be the same.
var
http = require('http'),
crypto = require('crypto'),
url = require('url');
hex_high_10 = { // set the highest bit and clear the next highest
'0': '8',
'1': '9',
'2': 'a',
'3': 'b',
'4': '8',
'5': '9',
'6': 'a',
'7': 'b',
'8': '8',
'9': '9',
'a': 'a',
'b': 'b',
'c': '8',
'd': '9',
'e': 'a',
'f': 'b'
}
http.createServer(function (req, res) {
var sum = crypto.createHash('sha1');
// namespace in raw form. FIXME using ns:URL for now, what should it be?
sum.update(new Buffer('a6e4EZ2tEdGAtADAT9QwyA==', 'base64'));
// add HTTP path
sum.update(url.parse(req.url).pathname.substr(1));
// get sha1 hash in hex form
var uuid = sum.digest('hex');
// format as UUID (add dashes, version bits and reserved bits)
uuid =
uuid.substr(0, 8) + '-' + // time_low
uuid.substr(8, 4) + '-' + // time_mid
'5' + // time_hi_and_version high 4 bits (version)
uuid.substr(13, 3) + '-' + // time_hi_and_version low 4 bits (time high)
hex_high_10[uuid.substr(16, 1)] + uuid.substr(17, 1) + // cloc_seq_hi_and_reserved
uuid.substr(18, 2) + '-' + // clock_seq_low
uuid.substr(20, 12); // node
// spit it out
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(uuid + '\n');
}).listen(8129, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8129/');