#marklogic #triples #marklogic-10
#marklogic #тройки #марклогик-10
Вопрос:
При попытке загрузить файл ntriples, содержащий около 7 миллионов троек, я получаю следующую ошибку от REST-API:
{"errorResponse":{"statusCode":500, "status":"Internal Server Error",
"messageCode":"INTERNAL ERROR",
"message":"SVC-CODEPOINT: (err:FOCH0001) xdmp:nquad($body, $options) -- Codepoint not legal . See the MarkLogic server error log for further detail."}}
Журнал ошибок здесь не более полезен:
2021-01-13 14:24:53.771 Info: Status 500: SVC-CODEPOINT: (err:FOCH0001) xdmp:nquad($body, $options) -- Codepoint not legal
Я прогнал файл через проверку rapper и Jena riot, и ни один из инструментов не вызывает проблем с файлом или каких-либо конкретных троек.
Как я могу устранить эту проблему с помощью MarkLogic?
Я могу сгенерировать файл, который использует другую сериализацию, но это заставляет меня переписывать свой код, когда это работало в прошлом и работает с двумя другими файлами в пакете. И другая сериализация может сработать или, если это не так, может привести к той же ошибке. В любом случае, я на самом деле не определил проблему. В файле должно быть что-то, но я хотел бы найти это, потому что мы также являемся источником ntriples.
Комментарии:
1. хм, казалось бы, где-то есть ошибка преобразования или синтаксического анализа. Прежде чем прибегать к бинарному поиску и обработке фрагментов файла, как насчет удаления любых буквенно-цифровых символов и просмотра того, что осталось? Может быть, это раскроет персонажей, которыми он может подавиться? Или попробуйте поместить содержимое внутри XML-структуры внутри блока CDATA:
<doc><![CDATA[ PUT_NTRIPLES_CONTENT_HERE ]]></doc>
а затем попробуйте выполнить синтаксический анализ как XML-файл, чтобы увидеть, улучшите ли вы диагностику?2. ошибка: FOCH0001, кодовая точка недопустима. Вызывается fn: codepoints-to-string, если входные данные содержат целое число, которое не является кодовой точкой допустимого символа XML. w3.org/TR/xpath-functions/#ERRFOCH0001
Ответ №1:
Я мог бы удалить вопрос, но если это кому-то поможет…
Преобразуйте ntriples в RDF / XML и загрузите этот файл. MarkLogic выдаст более ценное сообщение об ошибке:
2021-01-13 16:10:43.292 Info: Status 400: XDMP-DOCXMLCHAR: xdmp:get-request-body("xml") --
Invalid XML character codepoint 55358 at line 14398744 -- document contains non-XML character
Комментарии:
1. Любопытно, был ли это, в конце концов, действительно плохой персонаж или просто что-то, что не понравилось MarkLogic?
2. Это был действительно плохой символ (технически два), или, если быть точным, недопустимый символ юникода. Я думаю, что он был сгенерирован не-MarkLogic утилитой при экспорте RDF. У MarkLogic не было проблем, как только я заменил два неверных символа юникода на правильный — unicode.org/emoji/charts/emoji-list.html#1f929 . Я воздержусь от комментариев по поводу смайликов в RDF, за исключением того, что это законно.