Мне кажется, я понимаю разницу между «типизированными ресурсами» (как их называет Филдинг) и типами или классами, определенными в медиа-типах, таких как JSON-LD / HYDRA. Я отвечаю на свой вопрос, но, если необходимо, расширите / исправьте его.
TL; DR Насколько я понимаю, это ограничение относится к типам как предопределенным представлениям (или структурам) ресурса и рекомендует документировать возможные отношения и правила обработки медиа-типов вместо этой структуры. Эти отношения все еще могут быть сгруппированы в «типы», но представление не будет жестким.
Свойства обычно имеют предопределенные имена и понимаются в контексте их включающего типа. Это означает, что сервер / клиент должен согласовать это соглашение об именах для обработки этих типов, и поле, названное одинаково в одном типе и в другом типе, может иметь совершенно другую семантику. Это дает жесткую структуру для ресурсов.
С другой стороны, гипермедийные типы, такие как JSON-LD, не используют свойства обычным способом. Вместо этого они используют некоторую встроенную информацию (@context) для определения семантики свойств, которые могут быть другими сущностями, объектами значений, ссылками и т. Д. *
Обрабатывая ресурс с данным типом гипермедиа, свойства преобразуются в некоторые четко определенные отношения, обычно определяемые в словаре. Это означает, что одно и то же отношение может быть повторно использовано для нескольких типов, например, поля name
в Person
и Book
могут ссылаться на отношение https://schema.org/name между ними и объектами значений (например, простыми именами строк).
Это отделяет клиента от сервера, позволяя ему использовать общий словарь для типов отношений и определяя правила обработки для типа носителя, поэтому рекомендуется предварительно обработать ресурс перед его непосредственным использованием в его сериализованном формате (как вы можете не знать, как он возвращается).
Например:
{
"@context": "http://schema.org/",
"@type": "Person",
"@id": "http://srv.org/users/1",
"name": "Jane Doe",
"telephone": "(425) 123-4567",
"url": "http://www.janedoe.com"
}
- это тот же ресурс, что и
{
"@context": {
"a": "http://schema.org/name",
"b": "http://schema.org/telephone",
"c": {
"@id": "http://schema.org/url",
"@type": "@id"
}
},
"@type": "http://schema.org/Person",
"@id": "http://srv.org/users/1",
"a": "Jane Doe",
"b": "(425) 123-4567",
"c": "http://www.janedoe.com"
}
или даже как
[
{
"@id": "http://srv.org/users/1",
"@type": [
"http://schema.org/Person"
],
"http://schema.org/name": [
{
"@value": "Jane Doe"
}
],
"http://schema.org/telephone": [
{
"@value": "(425) 123-4567"
}
],
"http://schema.org/url": [
{
"@id": "http://www.janedoe.com"
}
]
}
]