Использование компактного URI в Йене

Я использую Jena для чтения онтологии, и пока она работает очень хорошо. К сожалению, я не смог понять, как использовать компактные uris, которые я определил в модели. Я определил префиксы, используя метод модели setNSPrefix(String prefix, String uri). Когда я пытаюсь получить операторы с помощью префикса, я ничего не получаю. Кроме того, когда я успешно получаю оператор, он содержит полный uri вместо компактного, который я определил. Он даже сделает это для xsd uri http://www.w3.org/2001/XMLSchema#

Например, я использую uri http://www.example.com#, я определил сопоставление префикса как ex, а мой оператор — http://www.example.com#father http://www.example.com#parentOf http://www.example.com#child, где отец — это субъект, parentOf — предикат, а дочерний объект — это объект. Если я попытаюсь получить его с помощью ex:father, я не получу никаких результатов, а когда я верну оператор, для субъекта, предиката и объекта будет полный uri. Я видел, что он использует префикс вместо uri, когда я делаю model.write(OutputStream), но это не особенно полезно для меня. Могу ли я использовать префикс вместо uri, как я пытался сделать, или это не то, что мне предоставит Jena?


person endorphins    schedule 23.02.2015    source источник


Ответы (1)


Когда я пытаюсь получить операторы с помощью префикса, я ничего не получаю.

Вы не можете сделать, например,

model.getResource("ex:foo")`

Ты должен сделать

model.getResource("http://example.org/foo");

Вы можете сделать это проще, конечно,

String EX = "http://example.org/";
model.getResource(EX+"foo");

Префиксы нужны только для того, чтобы сделать сериализацию более удобной для чтения и записи.

person Joshua Taylor    schedule 23.02.2015
comment
Итак, когда я получаю заявление на основе ресурса, есть ли способ показать префикс вместо полного uri или это похоже на ситуацию? Например, statement.getObject() вернет http://www.example.com#child, когда мне действительно нужно ex:child. - person endorphins; 23.02.2015
comment
Общего способа сделать это нет. Что если, например, в модели определены два префикса: например: example.com# и ex2 : например: example.com#chi? Вы бы хотели ex:child или ex2:ld? А если префикса нет? Что, если это несокращаемый IRI? Если вы хотите что-то подобное, вам придется свернуть свой собственный, проверив, может ли данный IRI быть сокращен каким-либо из префиксов, объявленных в модели. - person Joshua Taylor; 23.02.2015
comment
Ладно, я так и думал, что мне придется это сделать. Моя мысль заключалась в том, чтобы получить сопоставление префикса из модели, использовать его, чтобы увидеть, есть ли у uri префикс, а затем записать его как этот префикс вместо полного uri. - person endorphins; 23.02.2015
comment
если у uri есть префикс, он также может иметь более одного. - person Joshua Taylor; 23.02.2015