Ошибка в данных Schema.org для DiscussionForumPosting?

Я обнаружил ошибку в данных Schema.org для DiscussionForumPosting.

Когда я проверяю случайную тему форума Discourse через валидатор, поле @id содержит несуществующие URL-адреса.

Вот пример с завершающим путем /post_2 (это ошибка 404):

Я полагаю, что поля @id должны содержать рабочие URL-адреса, поскольку W3.org указывает:

Чтобы иметь возможность ссылаться на узлы в графе извне, важно, чтобы узлы имели идентификатор. IRI — это фундаментальное понятие связанных данных; для того чтобы узлы были по-настоящему связаны, разрешение идентификатора должно приводить к представлению этого узла. Это может позволить приложению получить дополнительную информацию об узле.

1 лайк

Интересно, не связана ли эта проблема с тем, как валидатор отображает идентификатор (id). Насколько я могу судить, id извлекается из разметки, и мы сами его не определяем. Например:

<div id='post_1' itemscope itemtype='http://schema.org/DiscussionForumPosting' class='topic-body crawler-post'>

id='post_1' соответствует @id.

Если кликнуть на этот раздел с id в валидаторе, он корректно подсвечивает пост с соответствующим id… значит, валидатор способен его правильно идентифицировать.

Я замечаю такое же поведение на других сайтах с значениями @id. Например, в данных схемы для этого вопроса на stackoverflow.com:

Screenshot 2023-03-28 at 5.59.12 PM

Здесь наблюдается та же проблема: ссылка https://stackoverflow.com/questions/7227202/answer-38775925 на самом деле не является корректным URL. Она страдает от той же ошибки: вместо / должен быть символ #, то есть правильная ссылка — https://stackoverflow.com/questions/7227202#answer-38775925.

Есть ли какие-либо признаки того, что это вызывает проблемы с использованием этих данных на практике где-либо?

1 лайк

Это интересно. Я даже не подумал проверить исходный код HTML и просто предположил, что это JSON-LD.

Google использует данные схемы, но я не уверен, использует ли он именно эту. Документация schema.org написана не очень понятно.

Похоже, что Discourse размещает несколько объектов DiscussionForumPosting на каждой теме, но пример в документации выглядит так, будто DiscussionForumPosting предназначен только для основной темы, а не для комментариев? В документации упоминается поле comment с объектом Comment (в единственном числе), хотя описание сформулировано во множественном числе.

image

Я только что посмотрел, как это реализовано в Invision, и они используют JSON-LD, помещая объекты Comment в поле comment. Похоже, это довольно много дополнительного текста для отправки в браузер.

Я не знаю, какой ответ правильный, но позже постараюсь изучить этот вопрос подробнее.

1 лайк

Это имеет отношение к делу?

3 лайка

Мне повезло, что я как раз наблюдаю за этим форумом — это удобно. Я владею кодом Google, который выполняет этот парсинг.

Ссылка на обсуждение дает хороший ответ на отклонение темы в комментарии. Остальное я рассмотрю здесь.

По сути, интерпретировать атрибуты id в HTML как идентификаторы узлов — это нестандартно. Так поступили в самом начале парсинга микроданных Google, вероятно, по каким-то размытым причинам. Если вы хотите явно указать идентификатор, следует использовать itemid. Я надеюсь когда-нибудь убрать этот хак, но извлечь что-то подобное без потерь сложно.

Во-вторых, IRI не обязательно должны быть разрешаемыми (dereferencable). Это лишь рекомендация W3C, но многие IRI таковыми не являются, и Google точно не требует этого.

Это становится проблемой только в том случае, если это приводит к непреднамеренному слиянию узлов в структурированных данных, например, если вы используете itemid с тем же значением в другом месте HTML. В противном случае это просто странность, которой можно пренебречь.

О, и, пожалуйста, не переходите на JSON-LD. Честно говоря, для текстово-насыщенной разметки, такой как форумы, предпочтительнее именно она. Необходимость дублировать текстовое содержимое — это бессмыслица. Просто легче создавать такую разметку, поэтому мы и продвигаем её.

9 лайков

Спасибо, что наблюдали за этим, @rrlevering! Похоже, что эту проблему можно закрыть, и мы обновим схему темы/поста по адресу Different schema type for Topics and Posts

5 лайков

Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не принимаются.