Formato query di ricerca record
Una chiamata alla funzione PeerGroupSearchRecords richiede un parametro stringa di query XML usato per determinare i criteri di base di una ricerca. Usare lo schema seguente per formulare una stringa XML:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xs:simpleType name="alphanumType">
<xs:restriction base="xs:string">
<xs:pattern value="\c+"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="operatorType">
<xs:choice maxOccurs="unbounded">
<xs:element ref="and" />
<xs:element ref="or" />
<xs:element ref="clause" />
</xs:choice>
</xs:complexType>
<xs:element name="and" type="operatorType"/>
<xs:element name="or" type="operatorType"/>
<xs:element name="clause">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="attrib" type="alphanumType" />
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="string"/>
<xs:enumeration value="date"/>
<xs:enumeration value="int"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="compare" default="equal">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="equal"/>
<xs:enumeration value="greater"/>
<xs:enumeration value="less"/>
<xs:enumeration value="notequal"/>
<xs:enumeration value="greaterorequal"/>
<xs:enumeration value="lessorequal"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="peersearch">
<xs:complexType>
<xs:choice>
<xs:element ref="clause" />
<xs:element ref="and" />
<xs:element ref="or" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Elementi da usare per una ricerca record
L'elemento primario in una ricerca record è peersearch, che contiene l'URI (Uniform Resource Identifier) dello schema associato nell'attributo xmlns . Quando peersearch viene usato come elemento figlio, è possibile usare e, clausola e o come elementi figlio.
e - L'elemento e esegue un'operazione AND logica su una o più clausole contenute tra i tag di apertura e chiusura. Altri eo tag possono essere figlio e i risultati ricorsivi delle clausole figlio sono inclusi nell'operazione.
Ad esempio, se si vuole ottenere un record che contiene un nome uguale a James Peters e un ultimo aggiornamento maggiore di 2/28/2003 o una data di creazione minore di 1/31/2003, usare la stringa di query XML seguente:
<?xml version="1.0" encoding="utf-8" ?> <peersearch xmlns:xs="https://www.w3.org/2001/XMLSchema"> <and> <clause attrib="peercreatorid" type="string" compare="equal">James Peters</clause> <or> <clause attrib="peerlastmodificationtime" type="date" compare="greater">2003-01-31</clause> <clause attrib="peercreationtime" type="date" compare="less">2003-02-328</clause> </or> </and> </peersearch>
clausola : l'elemento clausola specifica una regola comparativa di base che confronta il valore di un attributo record specifico con il valore contenuto tra i tag di apertura e chiusura. Il tipo e gli attributi di confronto devono essere forniti indica che l'operazione di confronto da eseguire. Ad esempio, una ricerca semplice che indica che tutti i record corrispondenti devono avere un valore peercreatorid uguale a James Peters viene visualizzato nella stringa di query XML come segue:
<?xml version="1.0" encoding="utf-8" ?> <peersearch xmlns:xs="https://www.w3.org/2001/XMLSchema"> <clause attrib="peercreatorid" type="string" compare="equal">James Peters</clause> </peersearch>
Gli attributi di tipo comuni includono int, stringa e data. L'attributo date può essere uno dei formati di data standard descritti in https://www.w3.org/TR/NOTE-datetime.
I valori per l'attributo di confronto sono uguali, notequal, less, greater, lessorequal e greaterorequal.
- oppure : l'elemento o esegue un'operazione OR logica in una o più clausole contenute tra i tag di apertura e chiusura. Altri elementio e possono essere figlio e i risultati ricorsivi delle clausole figlio sono inclusi nell'operazione. Ad esempio, se si vuole ottenere un record che contiene un nome uguale a James Peters o un ultimo aggiornamento compreso tra 1/31/2003 e 2/28/2003, usare la stringa di query XML seguente:
<?xml version="1.0" encoding="utf-8" ?>
<peersearch xmlns:xs="https://www.w3.org/2001/XMLSchema">
<or>
<clause attrib="peercreatorid" type="string" compare="equal">James Peters</clause>
<and>
<clause attrib="peerlastmodificationtime" type="date" compare="greater">2003-01-31</clause>
<clause attrib="peerlastmodificationtime" type="date" compare="less">2003-02-28</clause>
</and>
</or>
</peersearch>
Altre informazioni su una ricerca record
Il primo livello di nodi dopo peersearch può avere un solo elemento. Tuttavia, i figli successivi di tale elemento possono avere molti elementi allo stesso livello.
La query di ricerca seguente non è corretta:
<?xml version="1.0" encoding="utf-8" ?>
<peersearch xmlns:xs="https://www.w3.org/2001/XMLSchema">
<clause attrib="peercreatorid" type="string" compare="equal">James Peters</clause>
<and>
<clause attrib="peerlastmodificationtime" type="date" compare="greater">2003-01-31</clause>
<clause attrib="peerlastmodificationtime" type="date" compare="less">2003-02-28</clause>
</and>
</peersearch>
La query ha esito negativo perché due valori vengono restituiti per la corrispondenza senza essere risolti in un valore true/false, ovvero che una clausola è una query per il nome di un record uguale a James Peters e l'operazione AND corrisponde alle due clausole del componente. Il risultato è due valori true/false logici che sono contraddittori.
Per ottenere tutti i record che contengono un nome uguale a James Peters e un ultimo aggiornamento compreso tra 1/31/2003 e 2/28/2003, inserire la clausolae itag allo stesso livello tra apertura e chiusura e tag. Nell'esempio seguente viene illustrata la query riuscita:
<?xml version="1.0" encoding="utf-8" ?>
<peersearch xmlns:xs="https://www.w3.org/2001/XMLSchema">
<and>
<clause attrib="peercreatorid" type="string" compare="equal">James Peters</clause>
<and>
<clause attrib="peerlastmodificationtime" type="date" compare="greater">2003-01-31</clause>
<clause attrib="peerlastmodificationtime" type="date" compare="less">2003-02-28</clause>
</and>
</and>
</peersearch>
L'elenco seguente identifica altre informazioni specifiche che è necessario conoscere per scrivere una query riuscita:
- I tage e o non possono trovarsi tra i tag delle clausole di apertura e chiusura perché, in tale configurazione, vengono interpretati come parte del valore da corrispondere, che genera un errore o una corrispondenza non riuscita.
- Ogni coppia di tag di apertura e e o apertura e chiusura deve includere almeno uno o più nodi figlio.
- Un set zero di elementi non è consentito in questo schema.
Attributi record
Usando lo schema dell'attributo record, un utente può creare attributi di record specificati dall'attributo XML attrib in un elemento di clausola. Gli attributi per un nuovo record vengono aggiunti impostando il membro pszAttributes di PEER_RECORD su una stringa XML usando il formato specificato nello schema.
Peer Infrastructure riserva i nomi degli attributi seguenti:
- peerlastmodifiedby
- peercreatorid
- peerlastmodificationtime
- peerrecordid
- peerrecordtype
- peercreationtime
- peerlastmodificationtime
Caratteri speciali
Alcuni caratteri possono essere usati per esprimere modelli corrispondenti o per eseguire l'escape di altri caratteri speciali. Questi caratteri sono descritti nella tabella seguente.
Modello di carattere | Descrizione |
---|---|
* | Carattere jolly. Quando questo carattere viene rilevato in un valore di clausola, corrisponde a 0-n caratteri di qualsiasi valore, inclusi spazi vuoti e caratteri nonphanumerici. Ad esempio: "<clausola attrib="peercreatorid" type="string" compare="equal">James P*</clause>" Questa clausola corrisponde a tutti i valori peercreatorid con il nome "James" e un cognome a partire da "P". |
\* | Asterisco di escape. Questa sequenza corrisponde a un carattere asterisco. |
? | Carattere jolly a caratteri singoli. Quando questo carattere viene rilevato in un valore di clausola, corrisponde a qualsiasi singolo carattere, inclusi spazi vuoti e caratteri nonphanumerici. Per esempio: "<clause attrib="filename" type="string" compare="equal">data-0?.xml</clause>" Questa clausola corrisponde ai valori del nome file , ad esempio "data-01.xml" e "data-0B.xml". |
\? | Un punto interrogativo di escape. Questa sequenza corrisponde a un carattere punto interrogativo. |
\\ | Barra rovesciata di escape. Questa sequenza corrisponde a un singolo carattere barra rovesciata. |
Se la sequenza di caratteri non è valida, la funzione PeerGroupSearchRecords restituisce l'errore E_INVALIDARG. Una sequenza non valida è una sequenza che contiene un carattere "\" (barra rovesciata) non immediatamente seguito da un carattere "*" (asterisco), un carattere "?" (punto interrogativo) carattere o un altro carattere "\" (barra rovesciata).