Выбор форматов данных для предоставления общего доступа (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Независимо от того, создаете ли вы исходное приложение, позволяющее пользователям отправлять содержимое, или целевое приложение, получающее это содержимое, вам придется решить, какие форматы данных и типы файлов в нем будут поддерживаться. Здесь описываются стандартные форматы, поддерживаемые пространством имен Windows.ApplicationModel.DataTransfer, а также способы создания и использования пользовательских форматов, если стандартные форматы не применяются.

Выбор форматов данных для исходного приложения

При написании исходного приложения можно использовать любые формата данных и типы файлов. Хотя обычно одного формата вполне достаточно, представление данных в нескольких форматах дает пользователям возможность обмениваться данными. Например, если пользователь хочет отправить кому-либо форматированный текст, например веб-страницу, можно добавить поддержку простого текста, так как не все приложения способны отображать форматирование.

Примечание  Количество поддерживаемых дополнительных форматов зависит от типа содержимого, который могут передавать друг другу пользователи вашего приложения. Поэтому очень важно понять, как и каким содержимым они будут обмениваться. Например, представление форматированного текста в виде простого часто оправдывает себя. А добавление ссылки на веб-страницу с таким текстом вряд ли будет полезно.

 

Пример сценария: пользователь хочет поделиться статьей, которую он читает в вашем приложении. Если этот материал есть в Интернете, то сначала включите ссылку на статью. Кроме того, вам нужно включить аннотацию к статье со ссылкой на источник в формате HTML, а также на текст.

Пример сценария: пользователь хочет поделиться выделенным фрагментом статьи из вашего приложения. В подобной ситуации формат HTML наиболее точно отражает намерение пользователя. Стоит также включить текстовую версию выделенного пользователем фрагмента. Для этого рекомендуется использовать MSApp.createDataPackageFromSelection.

Эта таблица поможет вам решить, какие форматы данных должно поддерживать исходное приложение.

Основной тип данных, поддерживаемых приложением Рекомендуемый основной формат экземпляра DataPackage Дополнительные рекомендации
Неформатированный обычный текст Текст WebLink, если текст представляет собой ссылку на веб-страницу.
Ссылка WebLink Текст
Форматированное содержимое/HTML HTML

Text, если содержимое включает в себя только текст.

WebLink, если содержимое представляет собой ссылку.

Файл StorageItems
Одно изображение StorageItems
Несколько файлов и изображений StorageItems

 

Также поддерживаются пользовательские форматы, если требуется выполнение более специфических задач, чем те, на которые рассчитаны стандартные форматы. Эти пользовательские форматы могут либо создаваться на основе стандартных схем данных (которые можно найти, например, на веб-сайте http://www.schema.org), либо быть уникальными форматами, которые вы определяете для своего приложения.

Выбор форматов данных для целевого приложения

Для целевого приложения мы рекомендуем вам попытаться обеспечить поддержку как можно большего числа форматов. Благодаря этому пользователь сможет использовать ваше приложение всякий раз, когда ему захочется поделиться с кем-нибудь интересным содержимым. Однако, как и для исходных приложений, не следует поддерживать определенный формат, если не планируется получать этот тип данных. Например, не стоит показывать, что приложение, принимающее только текст, способно поддерживать точечные рисунки.

Ниже приведены некоторые рекомендации по выбору поддерживаемых форматов.

Основной тип данных, поддерживаемых приложением Рекомендуемый основной формат экземпляра DataPackage Дополнительные рекомендации
Неформатированный обычный текст Текст
Ссылка WebLink Текст
Форматированное содержимое/HTML HTML

Текст

WebLink

Файл StorageItems
Одно изображение StorageItems
Несколько файлов и изображений StorageItems
Особые типы файлов (такие, как .docx) StorageItems со специфическими расширениями имен файлов

 

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

Порой преимуществом вашего приложения может оказаться способность получать данные, содержащие больше информации, чем предоставляется в стандартных форматах. Например, для библиотечного приложения может потребоваться способность получать текст, но только если в нем содержится информация о книге. Для таких случаев поддерживаются пользовательские форматы. Эти пользовательские форматы могут либо создаваться на основе стандартных схем данных (которые можно найти, например, на веб-сайте http://www.schema.org), либо быть уникальными форматами, которые вы определяете для своего приложения.

Использование форматов на основе схемы

Часто данные, к которым следует предоставить общий доступ (в роли источника или получателя данных), более специфичны, чем данные, предоставляемые с помощью стандартных форматов. Например, приложению для любителей кино может пригодиться способность обмениваться информацией о фильмах с указанием таких подробностей, как название фильма, его оценка, режиссер и т. д. Приложению для книголюбов не помешает возможность делиться информацией о книгах, в частности, об авторе, названии и дате публикации. Если ваше приложение попадает в подобную категорию, рекомендуется обеспечить поддержку одной из множества схем, представленных на веб-сайте http://www.schema.org.

Если вы хотите использовать для обмена данными одну из этих схем, вы можете сделать это следующим образом.

  1. Определите элемент (книга, фильм и т. д.), которым пользователь хочет поделиться.
  2. Соберите сведения, связанные с элементом, и упакуйте их в формате JSON.
  3. С помощью setData добавьте содержимое в DataPackage. При этом необходимо включить идентификатор формата. Здесь в качестве идентификатора используется http://schema.org/<schema>. Например, http://schema.org/Book.

В этом примере показано, как происходит обмен данными в пользовательском формате.

var book = {
    "type" : "http://schema.org/Book",
    "properties" : 
    {
         "image" : "http://sourceurl.com/catcher-in-the-rye-book-cover.jpg",
         "name" : "The Catcher in the Rye",
         "bookFormat" : "http://schema.org/Paperback",
         "author" : "http://sourceurl.com/author/jd_salinger.html",
         "numberOfPages" : 224,
         "publisher" : "Little, Brown, and Company",
         "datePublished" : "1991-05-01",
         "inLanguage" : "English",
         "isbn" : "0316769487"
    }
};
book = JSON.stringify(book);

function shareCustomData() {
    var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", function (e) {
        var request = e.request;
        request.data.setData("http://schema.org/Book", book);
    });
}

Обратите внимание, что в объект DataPackage помещен только один формат данных. Таким образом, любому конечному приложению, которое выберет пользователь, будет известно, чего ожидать.

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

  1. Измените манифест пакета таким образом, чтобы объявить ваше приложение получателем данных. О том, как это сделать, см. раздел Краткое руководство.
  2. Добавьте в манифест пакета формат данных, определяющий схему, которую поддерживает ваше приложение. В качестве формата данных используйте http://schema.org/<schema>. Например, http://schema.org/Book.
  3. Используйте метод getDataAsync для получения содержимого от объекта DataPackageView, который вы получаете во время операции обмена содержимым.

В этом примере показано, как получать данные, предоставляемые в пользовательском формате.

if (shareOperation.data.contains("http://schema.org/Book")) {
    shareOperation.data.getTextAsync(("http://schema.org/Book").done(function (customFormatString) {
        var customFormatObject = JSON.parse(customFormatString);
        if (customFormatObject) {
            // This sample expects the custom format to be of type http://schema.org/Book
            if (customFormatObject.type === "http://schema.org/Book") {
                customFormatString = "Type: " + customFormatObject.type;
                if (customFormatObject.properties) {
                    customFormatString += "\nImage: " 
                            + customFormatObject.properties.image
                            + "\nName: " + customFormatObject.properties.name
                            + "\nBook Format: " + customFormatObject.properties.bookFormat
                            + "\nAuthor: " + customFormatObject.properties.author
                            + "\nNumber of Pages: " + customFormatObject.properties.numberOfPages
                            + "\nPublisher: " + customFormatObject.properties.publisher
                            + "\nDate Published: " + customFormatObject.properties.datePublished
                            + "\nIn Language: " + customFormatObject.properties.inLanguage
                            + "\nISBN: " + customFormatObject.properties.isbn;
                }
            }
        }
    });
}

Использование пользовательских форматов

Если на сайте http://schema.org/docs/full.htm нет подходящей схемы для вашего приложения, создайте свой пользовательский формат. При этом необходимо помнить следующее.

  • Необходимо правильно выбрать имя форматирования. В исходном и целевом приложениях должно использоваться одно и то же имя.
  • Формат должен быть опубликован. Это нужно для того, чтобы другие разработчики понимали, как следует упаковывать содержимое для данной схемы форматирования.

Эти моменты и прочие соображения более подробно изложены в разделе Правила создания пользовательских форматов данных.

Связанные разделы

Образец исходного приложения с общим доступом к содержимому

Образец конечного приложения с общим доступом к содержимому

Краткое руководство: общий доступ к содержимому

Краткое руководство: получение общего содержимого