Schema für Anwendungsinhalt

Das Anwendungsinhaltsschema (appcontent-ms) für Windows-Apps ermöglicht Entwicklern, die In-App-Suche zu verbessern, indem sie zusätzliche Informationen zum Inhalt Ihrer App für den Windows Search Index bereitstellen.

Funktionsweise

Um anzufordern, dass Windows Ihre App-Daten für In-App-Suchvorgänge indizieren möchten, erstellen Sie unter LocalFolder einen Ordner namens "Indexed", und speichern Sie die Dateien, die dort indiziert werden sollen. Windows indiziert den Dateiinhalt und die Metadaten (Eigenschaften) in diesem Ordner "Indexed" und allen zugehörigen Unterordnern.

Um das Schema appcontent-ms zum Indizieren von Informationen zu einer Datei oder einem Element zu verwenden, erstellen Sie eine appcontent-ms-Datei, und fügen Sie sie dem Ordner LocalFolder\Indexed Ihrer App hinzu (Sie müssen dies zur Laufzeit nach der Installation Ihrer App tun). Wenn Ihre App Windows.Storage verwendet. Suchen Sie APIs, um Abfragen für den indizierten Ordner auszuführen. Die Suche enthält Informationen aus Ihren appcontent-ms-Dateien.

Die Informationen in appcontent-ms-Dateien werden nur verwendet, wenn die App, die sie enthält, die Windows.Storage verwendet. Such-API zum Ausführen von Suchvorgängen; Die Informationen werden beispielsweise nicht in Windows Benutzeroberfläche oder in anderen Apps angezeigt.

Dieses Beispiel zeigt eine einfache appcontent-ms-Datei, die ein Element namens "Sample 1" beschreibt.

Beachten Sie, dass die Datei Elemente enthält, die nicht durch das schema appcontent-ms definiert sind: IndexerSampleInformation und IndexerSampleSpecificElement. Die Datei appcontent-ms muss über einen Stammknoten verfügen, der alle zu indizierenden Daten kapselt. Sie können diesem Knoten jedoch einen namen geben.

<?xml version="1.0" encoding="utf-8"?>
<IndexerSampleInformation>
  <Properties xmlns="http://schemas.microsoft.com/Search/2013/ApplicationContent">
    <Name>Sample 1</Name>
    <Keywords>
      <Keyword xml:lang="en-US">Sample 1 - keyword 1</Keyword>
      <Keyword>Sample 1 - keyword 2</Keyword>
    </Keywords>
    <Comment>Sample 1 comment</Comment>
    <AdditionalProperties>
      <Property Key="System.Title">Sample 1 Title</Property>
      <Property xml:lang="en-US" Key="System.Contact.EmailAddresses">
        <Value>bryan@contoso.com</Value>
        <Value>vincent@contoso.com</Value>
      </Property>
    </AdditionalProperties>
  </Properties>
  <IndexerSampleSpecificElement sc:IndexableContent="true" 
    xmlns:sc="http://schemas.microsoft.com/Search/2013/ApplicationContent">
    The text included here will be indexed, enabling full-text search.
  </IndexerSampleSpecificElement>
</IndexerSampleInformation>

Sie können sogar Windows Search an weisen, den Inhalt beliebiger Elemente zu indizierung. Verwenden Sie einfach das IndexableContent-Attribut , um search anzuordnen, den Inhalt zu indizieren. Im vorherigen Beispiel indiziert Windows Search den Inhalt des IndexerSampleSpecificElement, da das IndexableContent-Attribut auf TRUE festgelegt ist:

  <IndexerSampleSpecificElement sc:IndexableContent="true" 
    xmlns:sc="http://schemas.microsoft.com/Search/2013/ApplicationContent">
    The text included here will be indexed, enabling full-text search.
  </IndexerSampleSpecificElement>

Bei der Suche wird der Inhalt standardmäßig als Textinhalt behandelt. Wenn der Inhalt base64 ist, verwenden Sie das ContentType-Attribut , um den MIME-Typ anzugeben.

Das nächste Beispiel zeigt, wie Sie eine appcontent-ms-Datei in den Ordner LocalFolder\Indexed Ihrer App kopieren. Der Code kopiert alle gefundenen Dateien im Ordner appcontent-ms der App in den Ordner LocalFolder\Indexed. (Sie können auch neue appcontent-ms-Dateien direkt im Indizierten Ordner erstellen, anstatt sie von einem anderen Speicherort zu kopieren.)

/// <summary>
/// For the purposes of this sample, the appcontent-ms files are stored in an "appcontent-ms" folder in the
/// install directory. These are then copied into the app&#39;s "LocalState\Indexed" folder, which exposes them
/// to the indexer.
/// </summary>
public async static Task<string> AddAppContentFilesToIndexedFolder()
{
    var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
    var installDirectory = Windows.ApplicationModel.Package.Current.InstalledLocation;
    var outputString = "Items added to the \"Indexed\" folder:";
    var appContentFolder = await installDirectory.GetFolderAsync("appcontent-ms");
    var indexedFolder = await localFolder.CreateFolderAsync(
        "Indexed", Windows.Storage.CreationCollisionOption.OpenIfExists);
    var files = await appContentFolder.GetFilesAsync();
    foreach (var file in files)
    {
        outputString += "\n" + file.DisplayName + file.FileType;
        await file.CopyAsync(indexedFolder, 
            file.Name, Windows.Storage.NameCollisionOption.ReplaceExisting);
    }
    return outputString;
}
// For the purposes of this sample, the appcontent-ms files are stored in an "appcontent-ms" folder
// in the install directory.  These are then copied into the app&#39;s "LocalState\Indexed" folder,
// which exposes them to the indexer.
function _addAppContentFilesToIndexedFolder() {
    var localFolder = appData.localFolder,
        appcontentFolder,
        indexedFolder,
        installDirectory = Windows.ApplicationModel.Package.current.installedLocation;
    var output = "Items added to the \"Indexed\" folder:\n";
    installDirectory.getFolderAsync("appcontent-ms").then(function (retrievedAppcontentFolder) {
        appcontentFolder = retrievedAppcontentFolder;
        return localFolder.createFolderAsync(
            "Indexed", Windows.Storage.CreationCollisionOption.openIfExists);
    }).then(function (retrievedIndexedFolder) {
        indexedFolder = retrievedIndexedFolder;
        return appcontentFolder.getFilesAsync(appcontentFolder);
    }).then(function (files) {
        var promiseArray = [];
        for (var i = 0, len = files.length; i < len; i++) {
            promiseArray[i] = files[i].copyAsync(indexedFolder, 
                files[i].name, Windows.Storage.NameCollisionOption.replaceExisting);
            output += files[i].displayName + files[i].fileType;
            if (i < len - 1) {
                output += "\n";
            }
        }
        return WinJS.Promise.join(promiseArray);
    }).done(function () {
        WinJS.log &amp;&amp; WinJS.log(output, "sample", "status");
    });
}

Den vollständigen Code finden Sie im Indexer-Beispiel.

Elementreferenz

In der folgenden Tabelle sind alle Elemente in diesem Schema alphabetisch nach Namen sortiert.

Element BESCHREIBUNG
AdditionalProperties

Enthält zusätzliche Eigenschaften, die das Element beschreiben.

Comment

Enthält eine System.Comment-Datei , die das Element beschreibt.

Schlüsselwort

Eins der System.Keywords , das das Element beschreibt.

Schlüsselwörter

Enthält die System.Keywords , die das Element beschreiben.

Name

Gibt das System.ItemNameSystem.ItemNameDisplay \ des Elements an.

Eigenschaften

Enthält Eigenschaften, die das Element für den Windows Suchindex beschreiben.

Eigenschaft

Eine Eigenschaft, die das Element beschreibt.

Wert

Der Wert, der für die Eigenschaft indiziert wird.

 

Attribute für app-spezifische Elemente

Verwenden Sie diese Attribute, um Inhalte in Ihren eigenen app-spezifischen XML-Elementen zu indizieren.

Attribut BESCHREIBUNG

Contenttype

Das Festlegen dieser Eigenschaft für ein Element gibt an, dass der Inhalt des Elements als Base64-Codierung des angegebenen MIME-Typs/Inhaltstyps behandelt und mit dem Handler für diesen Inhaltstyp indiziert wird.

IndexableContent

Gibt an, dass der Text des Elements für die Suche indiziert werden soll, aber keiner Eigenschaft zugeordnet ist. Beachten Sie, dass Eigenschaften später basierend auf dem Eigenschaftenschlüssel abgerufen werden können, Textinhalt jedoch nicht.

 

Indexerbeispiel

Windows. Storage. Suche

Hinzufügen der Suche (HTML)

Hinzufügen der Suche (XAML)