Я работал на процессоре JSON -LD, как определено в JSON -LD api . Я пробирался через W3 C тестовых случаев и запутался в compact-0018. Точный ( ввод , контекст и вывод ) можно найти в W3 C, но я воспроизвел, как мне кажется, ключевые части ниже.
{
"@context": {
"term": {"@id": "http://example.com/term"}
"@language": "de"
},
"@id": "http://example.com/id1",
"http://example.com/term": {
"@set": [
{ "@value": "v0.1", "@language": "de" },
{ "@value": "v0.2", "@language": "en" },
"v0.3"
]
}
}
В тесте compact-0018 есть больше полей, но я не верю, что они будут применяться, поскольку они влияют на другие термины. Сокращенный вывод compact-0018:
{
"@context": {
"term": {"@id": "http://example.com/term"}
"@language": "de"
},
"@id": "http://example.com/id1",
"http://example.com/term": ]
"v0.1",
{ "@value": "v0.2", "@language": "en" },
{ "@value": "v0.3" }
]
}
Я не могу понять, почему «v0.1», который начинался как строка с явным языковым тегом «de», сжимается до «v0.1» в то время как «v0.3», который начинается как строка без языкового тега, заканчивается в объекте @value.
Первый шаг сжатия заключается в расширении документа в соответствии с моим алгоритмом расширения (который в настоящее время проходит все тесты, которые не требуют дополнительных параметров), этот документ должен быть расширен до
[
{
"@id": "http://example.com/id1",
"http://example.com/term": [
{ "@value": "v0.1", "@language": "de" },
{ "@value": "v0.2", "@language": "en" },
{ "@value": "v0.3", "@language": "de" }
}
]
, что предполагает, что «v0.1» и «v0.3» должны обрабатываться одинаково. Хотя всегда была возможность, что мне удалось получить ошибку расширения, которая не обнаруживалась в наборе тестов, более вероятно, что я неверно истолковал компактный алгоритм. Что в алгоритме объясняет, почему эти две строки обрабатываются по-разному в тесте compact-0018?