Каково различие между COM и OLE?

Когда SPARQLRepository RDF4J выполняет запрос SPARQL-запроса к этой конечной точке, конечная точка отправляет свой ответ в формате Turtle. К сожалению, этот ответ содержит синтаксическую ошибку. Происходит следующее:

  1. RDF4J выполняет запрос запроса, указывая несколько приемлемых форматов результатов (включая Turtle и N-Triples);
  2. Конечная точка выполняет запрос, выбирая Turtle как формат ответа и сериализует результат запроса в Turtle;
  3. RDF4J получает данные Turtle и анализирует их;
  4. проанализированный результат передается NTriplesWriter, который затем записывает его. [1112 ]

Однако документ результата запроса, который отправляет конечная точка, не является синтаксически допустимой Turtle, что приводит к прерыванию синтаксического анализатора Turtle RDF4J с ошибкой на этапе 3.

Проблема заключается в этой строке в ответе (строка 386):

    yago:Italian_War_of_1494–98 ,

В частности, символ между 1494 и 98. Хотя это выглядит как знак минус (-), что было бы совершенно законно, на самом деле это так называемый «черточка» (символ Unicode 0x2013). Это не юридический символ в префиксном имени в Turtle.

Модуль записи Turtle конечной точки должен правильно сериализовать значение, изменив его на полный URI вместо префиксного имени и используя escape-последовательность Unicode, например:

<http://yago-knowledge.org/resource/Italian_War_of_1494\u201398>

It возможно, стоит зарегистрировать отчет об ошибках с сопровождающими конечных точек с предложенным исправлением этого эффекта.

В качестве обходного пути вывод N-триплетов конечной точки (если вы заставляете ее отвечать N-триплетами вместо черепахи) кажется синтаксически правильным. Вы можете заставить сервер отвечать N-тройками вместо Turtle, «перезаписав» стандартный заголовок Accept, который отправляет RDF4J SPARQLRepository, например:

SPARQLRepository repo = new SPARQLRepository(endpoint);

// create a new map of additional http headers
Map<String, String> headers = new HashMap<String, String>();

// we set the Accept header to _only_ accept text/plain, forcing the endpoint
// to use N-Triples as the response format. This overwrites the standard
// Accept header that RDF4J sends.
headers.put("Accept", "text/plain");
repo.setAdditionalHttpHeaders(headers);

Как только вы это сделаете, Остальная часть вашего кода должна работать. [+1121]

46
задан TylerH 26 July 2019 в 14:32
поделиться

2 ответа

COM является развитый OLE. OLE был рядом интерфейсов и механизмов хранения данных для упрощения обмена данными между приложениями. COM был естественным расширением использования интерфейсов не только для обмена данными, но и функциональность во время выполнения - где на данные выходили фактические механизмы для упрощения использования. Я всегда изображал его примерно как различие между C и C++, где с C, можно совместно использовать заголовочные файлы и структуры, и с C++ Вы совместно используете инкапсулировавшие объекты.

Как что-то вроде мыльницы, я все еще пропускаю Структурированное хранилище OLE, так как существует что-то хорошее о совместном использовании непрозрачного хранения данных между сотрудничающими системами. При наблюдении, поскольку перетаскивание/буфер обмена все еще зависит от него, интересно, какова замена .NET будет?

4
ответ дан codekaizen 26 November 2019 в 20:32
поделиться

Технология OLE предшествует COM как отдельному объекту существенным количеством времени. Перед этим OLE был реализован как способ Встроить и Связать Объекты. Классическим примером является классический пример встраивания электронной таблицы в рамках документа слова. Базовая технология COM была включена так, чтобы другие языки, такие как VB могли взаимодействовать с теми объектами также.

Затем исторически, у нас было много программистов типа сервера, которые считали эти прохладные вещи как независимость языка, подсчет ссылок и модели потоков с завистью, но действительно не заботились слишком много о технологии встраивания вообще. Логическая вещь сделать состояла в том, чтобы разделить базовую функциональность сервера как COM - это был более естественно API низкого уровня.

Обе технологии все еще существуют. OLE отчасти соединен с или может совпасть с ActiveX в эти дни.

1
ответ дан 1800 INFORMATION 26 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: