Condividi tramite


Panoramica del sistema delle proprietà

Windows Property System è un sistema estendibile di lettura/scrittura di definizioni di dati che fornisce un modo uniforme per esprimere i metadati sugli elementi della shell. Il sistema di proprietà Windows in Windows Vista e versioni successive consente di archiviare e recuperare i metadati per gli elementi della shell. Un elemento shell è un singolo contenuto, ad esempio un file, una cartella, un messaggio di posta elettronica o un contatto. Una proprietà è una singola parte di metadati associata a un elemento della shell. I valori delle proprietà sono espressi come una struttura PROPVARIANT.

Questo argomento è organizzato come segue:

Introduzione

Le proprietà vengono identificate in modo univoco dal nome canonico (ad esempio System.Document.LastAuthor) e dalla chiave di proprietà (ad esempio PKEY_Document_LastAuthor). Una chiave di proprietà (PKEY) è la parte del nome di una coppia nome-valore costituita da un PKEY/PROPVARIANT o da una stringa/PROPVARIANT, dove la stringa è il nome canonico della chiave PKEY ( ad esempio System.Document.LastAuthor). Un PKEY è una definizione che indica al sistema di proprietà tutto ciò che deve conoscere sulla proprietà, mentre il valore è un'istanza effettiva della proprietà. Un PKEY contiene al suo interno un formatID e un propID.

Una singola proprietà è costituita dai tre elementi seguenti:

  • Nome canonico, ad esempio System.Music.Artist.
  • Descrizione dello schema, specificata nel formato di file XML con estensione propdesc ed espressa a livello di codice tramite IPropertyDescription.
  • Valore, ad esempio il nome di un cantante.

La descrizione dello schema è costituita da informazioni sulla proprietà, ad esempio il nome della proprietà, il tipo di dati, i vincoli, le informazioni su come la proprietà interagisce con le visualizzazioni e il sistema di ricerca e così via. Il nome e la descrizione dello schema sono definiti a livello globale e sono uguali per tutti gli elementi e i tipi. Un valore è specifico di un singolo elemento. Ovvero, la proprietà System.Music.Artist viene sempre definita come stringa multivalore, ma può avere un valore diverso (o nessun valore) per ogni elemento.

Un gestore di proprietà traduce i dati archiviati in un file in uno schema strutturato riconosciuto e accessibile da Windows Explorer, Windows Search e altre applicazioni. Questi sistemi possono quindi interagire con il gestore delle proprietà per scrivere e leggere le proprietà da e verso il file. I dati tradotti vengono esposti a livello di codice e visualizzati all'utente tramite Esplora file in diversi contesti, tra cui la visualizzazione dettagli, le descrizioni informazioni, il riquadro dei dettagli, le pagine delle proprietà e così via. Ogni gestore di proprietà è associato a un particolare tipo di file, identificato dall'estensione del nome file. Gli sviluppatori devono implementare un gestore di proprietà che produce e utilizza il formato nativo del tipo di file, ad esempio .jpg o .pngo usare l'archivio proprietà In-Memory, che produce e utilizza il formato binario MS-PROPSTORE.

Windows Property System crea un modello di dati astratto che fornisce un livello di astrazione da singoli formati di file. Il modello di dati astratto fornito dal sistema di proprietà di Windows è un metodo per la lettura e la scrittura di un set estendibile di valori denominati associati a un elemento della shell. L'espressione value è flessibile, supporta molti tipi di dati ed è estendibile, consentendo l'espressione arbitraria (VT_BLOB) e gli oggetti da esprimere come valore.

A causa dell'astrazione, è possibile eseguire query sugli attributi o sui metadati di qualsiasi elemento. Esempi di elementi che possono essere astratti includono documenti di Microsoft Office, tag ID3 e AutoCAD e altri software proprietari di terze parti. Analogamente, se si dispone di un file .jpeg, è possibile utilizzare i codec .jpeg ed EXIF per leggere i byte del file per individuare le dimensioni dell'immagine. Se invece si dispone di un file .png, è necessario un codec diverso e codice diverso per farlo. L'uso del sistema di proprietà Windows evita questo tipo di problema. Se si implementa un nuovo tipo di file, è possibile collegarsi all'astrazione uniforme offerta dal sistema di proprietà di Windows e specificare come rendere i metadati di consumo. Per questi motivi, è sempre preferibile usare la piattaforma comune fornita dal sistema di proprietà Windows.

Scenari di sviluppo

Le proprietà sono espresse dai produttori e dai consumatori. In questo contesto, i produttori sono gli inventori delle proprietà nel sistema di proprietà Windows e i consumer sono applicazioni (e i relativi sviluppatori) che utilizzano le informazioni sulle proprietà di questo sistema. Gli utilizzi di e i partecipanti nel sistema di proprietà di Windows sono identificati nella tabella seguente.

Uso del sistema di proprietà Windows Partecipante
Blocco costitutivo che fornisce un registro estendibile di descrizioni delle proprietà, un'implementazione dell'archivio di proprietà in memoria e servizi per il collegamento ai gestori di proprietà, la conversione dei tipi di dati e la serializzazione degli archivi di proprietà. Consumatore
Applicazioni che vogliono leggere e scrivere proprietà in modo astratto. Consumatore
Inventori di proprietà che definiscono nuove proprietà per il sistema di proprietà definendo schemi di proprietà personalizzati e sviluppando i propri gestori di proprietà. Produttore
Proprietari del formato di file che vogliono abilitare l'accesso alle proprietà archiviate nei formati di file personalizzati. Produttore

 

I consumatori consumano le proprietà, gli schemi e gli handler delle proprietà esistenti. Le proprietà disponibili per l'utilizzo includono proprietà di lettura/scrittura dai gestori di proprietà per i tipi di file supportati e possono includere anche alcune proprietà personalizzate. Gli schemi disponibili includono almeno lo schema di sistema e talvolta anche altri. Un consumer può creare un'applicazione per utilizzare i metadati e creare una visualizzazione basata sull'artista, indipendentemente dalle cartelle in cui sono archiviati gli elementi. La gerarchia delle cartelle di file è irrilevante. Ad esempio, è possibile specificare tutti gli elementi della canzone da un particolare cantante senza preoccuparsi della posizione di tali elementi. Questo scenario complesso end-to-end non è limitato al sistema di proprietà di Windows, ma prevede diversi componenti, ad esempio l'indicizzazione e le cartelle di ricerca.

Gli inventori delle proprietà, o sviluppatori di terze parti, sono produttori nel sistema di proprietà di Windows. Quando si prepara a definire una nuova proprietà, esaminare prima di tutto il set di proprietà definite da Windows. Se trovi uno che soddisfi le tue esigenze, del tipo e della semantica che corrispondono all'uso richiesto, usa tale proprietà e non inventarne uno nuovo. Se si definisce una nuova proprietà personalizzata, provare a ottenere un contratto con altri sviluppatori che potrebbero voler usarla e pubblicare il risultato di tale contratto in modo che possano unirsi alla community degli utenti di tale proprietà.

I produttori possono sfruttare le funzionalità di Esplora file di Windows. Ad esempio, se si scrive un nuovo formato di immagine e si implementa un gestore di proprietà, il nuovo formato di file diventa disponibile in Esplora File. Gli utenti possono quindi contrassegnare le loro fotografie e pivotare la raccolta di fotografie basandosi su qualsiasi proprietà del Sistema di Proprietà di Windows. In effetti, qualsiasi operazione eseguita da Shell con le proprietà, gli sviluppatori di terze parti possono eseguire nelle proprie applicazioni. Sono inclusi il raggruppamento, l'ordinamento, l'esecuzione di query e la visualizzazione di proprietà complete. L'esperienza utente fornita da Windows Explorer può essere ampiamente implementata da terze parti con API disponibili pubblicamente. Esplora file può essere sostituito o esteso utilizzando queste API.

Dal punto di vista di un'applicazione che usa il modello di dati shell, esistono una vasta gamma di scenari che comportano l'uso del sistema di proprietà Windows. Le applicazioni di gestione dei contenuti multimediali sono un esempio importante. Gli scenari di sistema delle proprietà principali includono scenari come la lettura della proprietà parola chiave di una fotografia o l'impostazione della proprietà datetaken. Esempi di scenari di integrazione end-to-end abilitati dal sistema di proprietà di Windows, ma che richiedono il funzionamento di diversi altri componenti, includono la visualizzazione di tutte le immagini o la ricerca di un documento contenente una parola chiave.

Le proprietà servono sia i produttori che i consumatori quando si interfacciano con Windows Search e l'indicizzazione. Windows Search dispone di una cache di valori di proprietà usati nell'implementazione del servizio Windows Search (WSS). Questi valori delle proprietà possono essere sottoposti a query a livello di codice tramite il provider OLE DB di Windows Search oppure tramite ISearchFolderItemFactory, che rappresenta gli elementi nei risultati della ricerca e nelle viste basate su query. Windows Search raccoglie e archivia quindi le proprietà generate dai gestori di filtri o dai gestori di proprietà quando viene indicizzato un elemento, ad esempio un documento di Word. Questo store viene scartato e ricostruito quando l'indice viene ricompilato.

Nota

Tenere presente che quando si riregistra uno schema, le modifiche apportate agli attributi delle proprietà definite in precedenza potrebbero non essere rispettate dall'indicizzatore. La soluzione consiste nel ricompilare l'indice o introdurre nuove proprietà che riflettono le modifiche anziché aggiornare quelle precedenti (non consigliate). Per altre informazioni, vedere Note to Implementers più avanti in questo argomento.

 

Ad esempio, uno sviluppatore che crea un'applicazione multimediale vuole mostrare agli utenti dell'applicazione tutta la musica disponibile da un artista specifico. L'applicazione fornirà all'utente un elenco di artisti disponibili e quindi genera un elenco di tutta la musica disponibile dall'artista selezionata dall'utente. Oppure un utente finale potrebbe voler eseguire una query per ?artist:Beethoven? ed essere esposto all'elenco completo delle proprietà disponibili nel corso della ricerca. In questo esempio viene usato lo spazio dei nomi shell, i gestori di proprietà e/o l'esecuzione di query sull'indice tramite uno dei seguenti elementi:

  • Un'origine dati di shell.
  • Provider OLE DB.
  • File di ricerca salvata (con estensione search-ms) utilizzato per avviare una query navigando nel file di ricerca in Esplora file o associandolo a IShellFolder tramite codice.

Nota

Anche se la proprietà System.Kind non fa parte di questo scenario dell'applicazione multimediale, può essere usata per compilare una query che restituisce tutti i file con estensione search-ms in un particolare ambito.

 

Il modo preferito per accedere alle API di ricerca e creare applicazioni di Ricerca di Windows consiste nell'usare un'origine dati shell. ISearchFolderItemFactory è un componente in grado di creare istanze dell'origine dati della cartella di ricerca, ovvero una sorta di origine dati "virtuale" fornita dalla shell che può eseguire query su altre origini dati nello spazio dei nomi shell ed enumerare i risultati. A tale scopo, è possibile usare l'indicizzatore oppure enumerare e controllare manualmente gli elementi negli ambiti specificati.

Gli sviluppatori di terze parti possono creare applicazioni che utilizzano i dati nell'indice tramite query a livello di codice e possono estendere i dati nell'indice per i tipi di file e di elementi personalizzati da indicizzare tramite Windows Search. Se si desidera visualizzare i risultati delle query in Esplora risorse, è necessario implementare un'origine dati shell prima di poter creare un gestore di protocollo per estendere l'indice. Tuttavia, se tutte le query saranno a livello di codice (ad esempio tramite OLE DB) e interpretate dal codice dell'applicazione anziché dalla shell, uno spazio dei nomi shell è comunque preferibile ma non obbligatorio. Per Windows è necessario un gestore di protocollo per ottenere informazioni sul contenuto dei file, ad esempio elementi nei database o tipi di file personalizzati. Mentre Windows Search può indicizzare il nome e le proprietà del file, Windows non dispone di informazioni sul contenuto del file. Di conseguenza, tali elementi non possono essere indicizzati o esposti nella shell di Windows. Implementando un gestore di protocollo personalizzato, è possibile esporre questi elementi. Per un elenco dei gestori definiti dallo scenario di sviluppo che si desidera raggiungere, consultare "Panoramica dei gestori" nella sezione Windows Search come piattaforma di sviluppo.

Nota

Un'origine dati Shell è talvolta nota come estensione dello spazio dei nomi Shell. Un gestore è talvolta noto come estensione Shell o gestore dell'estensione Shell.

 

Nota per gli implementatori

A causa di potenziali difficoltà che l'indicizzatore potrebbe avere quando si utilizza lo schema del sistema di proprietà, è fondamentale definire gli attributi con attenzione e strategicamente per la prima versione dello schema. Eventuali modifiche apportate agli attributi (tipo, larghezza colonna, se indicizzabili) non verranno riflesse nel database dopo la registrazione di uno schema. L'unico modo per fare in modo che queste modifiche vengano riconosciute dopo che lo schema è stato registrato una sola volta in un sistema sarebbe ricompilare l'indice e quindi registrare il nuovo schema oppure registrare lo schema e quindi creare una nuova proprietà per ogni versione successiva; ad esempio PKEY_GroupName_PropertyNameV2, PKEY_GroupName_PropertyNameV3e così via. Non è consigliabile creare nuove proprietà in questo modo, perché più colonne estranee possono influire sulle prestazioni del sistema.

Documentazione del sistema di proprietà Windows

La parte restante di questa documentazione contiene le sezioni seguenti:

Risorse aggiuntive

Guida per gli Sviluppatori del Sistema di Proprietà Windows

Riferimento del sistema di proprietà

Esempi di codice del sistema di proprietà