Вы сказали, что открыты для других опций, кроме автоматического увеличения числа. Хорошей альтернативой является использование UUIDs .
Если вам все равно, как выглядит URI, вы можете использовать функцию UUID
:
INSERT {
?uri dct:title "Example Title"
}
WHERE {
BIND (UUID() AS ?uri)
}
Это создаст URI, такие как <urn:uuid:b9302fb5-642e-4d3b-af19-29a8f6d894c9>
.
Если вы предпочитаете иметь HTTP URI в своем собственном пространстве имен, вы можете использовать strUUID
:
INSERT {
?uri dct:title "Example Title"
}
WHERE {
BIND (IRI(CONCAT("http://example.org/item/", strUUID())) AS ?uri)
}
Это создаст URI, такие как http://example.org/item/73cd4307-8a99-4691-a608-b5bda64fb6c1
.
UUID довольно хороши. Риск столкновения незначителен. Функции являются частью стандарта SPARQL. Единственный недостаток в том, что они длинные и некрасивые.