Почему базовый префикс в относительном IRI для идентификатора сокращается до расширения? - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть документ JSON-LD, в котором базовый префикс не раскрывается, как я ожидаю, но сокращается сначала до его корня, а затем добавляются данные @id:

{
    "@context": {
        "tag": "@type",
        "@base": "http://example.com/base#auth-1/",
        "Line": "lit:Line",
        "load": "book:load",
        "book": "http://gerastree.at/auth-1/",
        "lnum": "lit:lnum",
        "lline": {
            "@language": "deu",
            "@id": "lit:lines"
        },
        "lit": "http://gerastree.at/lit_2014#",
        "lid": "@id"
    },
    "loadid": "loadIDstring",
    "load": [
        {
            "tag": "Line",
            "lnum": 1,
            "lline": "asdf1",
            "lid": "1"
        },
        {
            "tag": "Line",
            "lnum": 2,
            "lline": "asdf2",
            "lid": "2"
        }
    ]
}

RIOT (илизатем игровая площадка) дает:

 riot --syntax=jsonld --output=turtle lines.jsonld
@prefix lit:  <http://gerastree.at/lit_2014#> .
@prefix book:  <http://gerastree.at/auth-1/> .

_:b0    book:load  <http://example.com/1> ;
        book:load  <http://example.com/2> .

<http://example.com/1>
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>  lit:Line ;
        lit:lines  "asdf1"@deu ;
        lit:lnum   1 .

<http://example.com/2>
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>  lit:Line ;
        lit:lines  "asdf2"@deu ;
        lit:lnum   2 .

Я не могу понять, почему идентификаторы двух строк просто <http://example.com/2>, а не <http://example.com/base#auth-1/2>.Почему базовый префикс сокращен?Что я могу изменить, чтобы избежать этого?

1 Ответ

0 голосов
/ 30 сентября 2018

@base следует RFC 3986 Создание базового URI , который гласит (выделено жирным шрифтом):

Если базовый URI получен изссылка URI, затем эта ссылка должна быть преобразована в абсолютную форму и удалена из любого фрагмента компонента до ее использования в качестве базового URI.

Таким образом, ваш

"@base": "http://example.com/base#auth-1/",

приведет к этому базовому IRI:

http://example.com/base

Если вы укажете "lid": "#auth-1/2" вместо "lid": "2", вы получите http://example.com/base#auth-1/2.

В качестве альтернативыВы можете определить префикс для этих значений, например

"foobar": "http://example.com/base#auth-1/"

и использовать

"lid": "foobar:2"
...