共有のためのデータ形式の選択 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
ユーザーがコンテンツを共有できるソース アプリまたはそのコンテンツを受け取るターゲット アプリのどちらを作る場合も、サポートするデータ形式とファイルの種類について時間をかけて検討する必要があります。ここでは、Windows.ApplicationModel.DataTransfer 名前空間がサポートする標準の形式と、標準形式が合わない場合にカスタム形式を作成して使う方法を説明します。
ソース アプリのデータ形式の選択
ソース アプリを作る場合は、データ形式またはファイルの種類を複数使うことができます。1 つの形式がそれ以外の形式より適切であることは十分に考えられますが、同じデータを他の形式でも提供すると、ユーザーが好みのターゲット アプリでデータを共有できるようになります。たとえば、ユーザーが Web ページのテキストのような書式付きテキストの共有を求めている場合は、書式付きテキストをサポートしていないターゲット アプリもあることから、プレーンテキスト版のコンテンツを併せて提供することをお勧めします。
注 追加でサポートする書式の数は、ユーザーが共有する可能性のあるコンテンツの種類によって異なります。コンテンツの特徴や、ユーザーがコンテンツを共有する目的を検討することが重要です。たとえば、書式付きテキストのプレーンテキスト版を作ることは、一般的に適切な対応です。一方、対象のテキストを含む Web ページへのリンクを作っても、おそらくユーザーの役には立ちません。
サンプル シナリオ: ユーザーは、アプリを使って読んでいる記事を共有したいと考えています。コンテンツが Web 上にある場合は、記事へのリンクを最初に含めます。さらに、記事の要約とソースへのリンクを、テキストと HTML 形式で含めます。
サンプル シナリオ: ユーザーは、アプリの記事の抜粋を共有したいと考えています。この場合、HTML 形式がユーザーの意図を最も正確に反映します。さらに、ユーザーが選択したコンテンツのテキスト バージョンも含める必要があります。これを実現するには、MSApp.createDataPackageFromSelection を使う方法が適しています。
ソース アプリでサポートする形式を決める際には、次の表が参考になります。
アプリがサポートする主要なデータの種類 | お勧めの主要な DataPackage 形式 | その他の推奨形式 |
---|---|---|
書式なしのプレーンテキスト | Text | WebLink (テキストが Web ページ リンクである場合)。 |
リンク | WebLink | Text |
書式付きコンテンツ/HTML | HTML | Text (コンテンツにテキストだけが含まれている場合)。 WebLink (コンテンツがリンクである場合)。 |
ファイル | StorageItems | |
1 つの画像 | StorageItems | |
複数のファイルと画像 | StorageItems |
カスタム形式は、標準形式より細かい指定が必要な状況に対応するためにサポートされています。カスタム形式には、http://www.schema.org で提供されているような標準のデータ スキーマをベースにした形式と、アプリ用に独自に定義した形式があります。
ターゲット アプリのデータ形式の選択
ターゲット アプリでは、できるだけ多くの形式をサポートすることをお勧めします。そうすることで、ユーザーが共有に使うアプリに選ばれる可能性が高まります。ただし、ソース アプリの場合と同じように、その種類のデータを受け取る予定がない形式はサポートしないようにする必要があります。たとえば、テキストだけに対応したアプリで、ビットマップのサポートを登録する必要はありません。
サポートする形式を決める際には、次の表が参考になります。
アプリがサポートする主要なデータの種類 | お勧めの主要な DataPackage 形式 | その他の推奨形式 |
---|---|---|
書式なしのプレーンテキスト | Text | |
リンク | WebLink | Text |
書式付きコンテンツ/HTML | HTML | |
ファイル | StorageItems | |
1 つの画像 | StorageItems | |
複数のファイルと画像 | StorageItems | |
特定のファイルの種類 (.docx など) | StorageItems (特定のファイル名拡張子付き) |
アプリが複数の形式をサポートし、そのすべての形式が共有されるコンテンツに含まれている場合は、アプリとの関連性が最も高い形式のみを処理することをお勧めします。たとえば、アプリがリンクを共有する場合に、リンクとテキストの両方を含んだ共有コンテンツを受け取ったときは、アプリでリンクのみを処理するようにします。
標準形式では提供されない情報を含んだデータを受け取ることが、アプリのメリットになる場合があります。たとえば、ライブラリ アプリでは、書籍に関する情報を含むテキストのみを受け取ることが必要になる場合があります。 カスタム形式は、このような状況に対応するためにサポートされています。カスタム形式には、http://www.schema.org で提供されているような標準のデータ スキーマをベースにした形式と、アプリ用に独自に定義した形式があります。
スキーマベースの形式を使う場合
ソース アプリでもターゲット アプリでも、共有が必要なデータが標準形式のデータに比べて内容が細かいことが少なくありません。たとえば、映画に焦点を絞ったアプリでは、タイトル、年齢区分、監督など、映画に関する細かい情報の共有を必要とします。書籍に焦点を絞ったアプリでは、著者、タイトル、発行日などの書籍に関する情報の共有を必要とします。アプリがこのようなカテゴリに当てはまる場合は、http://www.schema.org で提供されている多数のスキーマの中からサポートするスキーマを選ぶことをお勧めします。
このように選んだスキーマを使ってデータを共有する方法は次のとおりです。
- ユーザーが共有したいと思っている項目 (本や映画など) を特定します。
- その項目に関連する情報を収集し、JavaScript Object Notation (JSON) 形式でパッケージ化します。
- setData を使ってコンテンツを DataPackage に追加します。このときに、形式 ID を含める必要があります。ここでは、
http://schema.org/<schema>
を ID として使います。たとえば、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 つしか入れていない点に注目してください。これで、ユーザーが選ぶどのターゲット アプリでも、共有データの形式がわかります。
このようなスキーマを使うデータを受け取る場合は、次の手順に従ってください。
- パッケージ マニフェストを編集して、アプリが共有ターゲットであることを宣言します。この手順については、「クイックスタート」をご覧ください。
- パッケージ マニフェストで、アプリがサポートするスキーマを特定するデータ形式を追加します。
http://schema.org/<schema>
をデータ形式として使います。たとえば、http://schema.org/Book
と記述します。 - 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 に見つからない場合は、独自のカスタム形式を作ることができます。その場合は、次の重要なポイントを覚えておく必要があります。
- カスタム形式の名前は重要です。ソース アプリとターゲット アプリで同じ名前を使う必要があります。
- 作った形式は公開する必要があります。これで、その形式を使う開発者は、コンテンツをどのようにパッケージするとよいかがわかります。
上記の説明とその他の考慮事項を、「カスタム データ形式の作成のガイドライン」でさらに詳しく説明しています。