2009-04-07 5 views
0

Есть ли способ переопределить метод по умолчанию для создания анонимных идентификаторов узлов Jena?Создание идентификаторов Jena Bnode

В идеале я хотел бы передать Jena функтору, который будет генерировать идентификаторы, чтобы я мог сделать их глобально уникальными (а не просто уникальными для машины). Функтор следует использовать при создании AnonId.

public interface IdGenerator { 
    public String createId() { 
     // create a globally unique ID 
     ... 
     return uid; 
    } 
} 

Это несколько связано с my previous question.

Редактировать: Я понимаю, что AnonId имеет конструктор, который принимает параметр id. Я надеюсь избежать использования этого конструктора повсюду, а вместо этого просто скажу Йене (однажды), как генерировать идентификаторы.

Редактировать 2: Даже если я не возражал против вызова этого конструктора повсюду, это может быть невозможно, поскольку анонимные узлы могут быть созданы с помощью кода библиотеки, к которому у меня нет доступа.

+0

Почему вы хотите это сделать? Если вы действительно хотите это сделать, почему бы не пройти весь путь и не дать URI узлов (что упрощает их глобальное единство)? – DNA

+0

@DNA. Мой конкретный случай использования имел отношение к синхронизации моделей на разных машинах (см. [Этот вопрос] (http://stackoverflow.com/questions/727449/synchronizing-jena-ontmodels-with-bnodes)). Мне нужно было убедиться, что анонимные узлы, созданные на разных машинах, будут иметь разные идентификаторы. –

ответ

1

У Jena нет крючков для подключения другого генератора AnonId. Создание AnonId s также не централизовано в одном месте, поэтому нет простого способа обеспечить использование new AnonId(String). Лучшим способом достижения вашей цели было бы исправить источник AnonId, который был бы достаточно простым.

FWIW, код AnonId уже имеет два разных способа генерации идентификаторов, поэтому добавление абстракции для этого к кодовой базе Jena может быть разумной идеей.