Функция forNonBlank в OpenRefine

Я получаю сообщение об ошибке при использовании forNonBlank в функции экспорта шаблонов OpenRefine.

У меня есть ячейки с несколькими субъектами, которые я хочу записать в отдельных элементах dcterms: subject xml. Пример:Geology--Alberta--Coal Valley. // Geology, Structural. // Geology, Stratigraphic--Cretaceous.

Я использую опцию Шаблонный экспорт OpenRefine для экспорта в XML, аналогично процессу, описанному здесь.

Это выражение отлично работает:

{{forEach(cells["dcterms:subject"].value.split(" // "), v, "<dcterms:subject>" + v + "</dcterms:subject>\n")}}

Я получил:

<dcterms:subject>Geology--Alberta--Coal Valley.</dcterms:subject><dcterms:subject>Geology, Structural.</dcterms:subject><dcterms:subject>Geology, Stratigraphic--Cretaceous.</dcterms:subject>

Но при использовании forNonBlank как в:

{{forNonBlank(cells["dcterms:subject"].value.split(" // "), v, "<dcterms:subject>" + v + "</dcterms:subject>\n", "")}}

Я получил:

<dcterms:subject>[Ljava.lang.String;@16657412</dcterms:subject>

Что-то не так с моим кодированием, или это ошибка?

Спасибо за вашу помощь.

1 ответ

Решение

forNonBlank не является итерационной функцией, поэтому функция:

forNonBlank (ячейки ["dcterms:subject"].value.split(" // "), v, "" + v + "\n", "")

Оценивает массив, созданный в результате разделения, на предмет того, является ли он пустым или нет (весь массив, а не каждый элемент в массиве), и обнаруживает, что он не пуст, назначает массив переменной 'v'.

По сути, forNonBlank делает нечто похожее на объединение if и isNonBlank, а не forEach и isNonBlank

У вас есть несколько вариантов делать то, что вы хотите, но вам нужен где-то итератор. Например:

forEach (cell ["dcterms:subject"].value.split(" // "),v,forNonBlank(v,w, "" + w + "", "")).join("/n")

Другие вопросы по тегам