Функция 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")