Допустим, я разработал тип носителя, который является строгим подмножеством другого типа носителя. Например, мой тип мультимедиа application/vnd.example.foo+xml
(далее сокращенно foo+xml
). Этот тип носителя является строгим подмножеством типа носителя application/xhtml+xml
(далее сокращенно xhtml
). По сути, мое определение типа носителя добавляет дополнительные инструкции по обработке (или полностью их заменяет) к определенным конструкциям в типе носителя xhtml
. В качестве примера можно сказать, что в любых foo+xml
документах xpath //ul[@class='foo']/li[a]
должен показываться определенным образом клиентами, а остальная часть документа должна игнорироваться, модель обработки, которая весьма отличается от оригинального xhtml
типа носителя.
Вооружившись этой информацией, сервер теперь может начать создавать представления этого типа, и мои клиенты могут передавать заголовки Accept и с удовольствием использовать этот тип документа, причем оба они соблюдают инструкции по обработке, изложенные в моем определении типа. Тем не менее, это нестандартный тип мультимедиа, который я не могу предположить, что кто-нибудь будет знать, как его обрабатывать.
У меня есть вариант:
- Когда клиент предпочитает тип носителя
foo+xml
, я передаю документ с типом содержимого, установленным на этот тип носителя.
- Когда клиент предпочитает тип носителя
xhtml
, я подаю тот же документ с заголовком xhtml
Content-Type
Это означает, что универсальные клиенты, которые не знают, что такое foo+xml
, но, вероятно, понимают, что такое xhtml
, все еще могут обрабатывать мой документ, переходить по ссылкам на другие ресурсы, представлять его пользователям в общем виде и так далее. Аналогично, клиент, который знает семантику foo+xml
, может фактически получить подтверждение того, что этот документ на самом деле является просто этим, вместо того, чтобы угадывать или анализировать документ, чтобы увидеть, выглядит ли он вообще как-то, что он может обрабатывать (например, через HTML). профилирование, микроформаты и пр.).
- Каковы плюсы и минусы этого
- Есть ли предшествующий уровень техники, который повторяет эту технику?