Format de requête de recherche d’enregistrements
Un appel à la fonction PeerGroupSearchRecords nécessite un paramètre de chaîne de requête XML utilisé pour déterminer les critères de base d’une recherche. Utilisez le schéma suivant pour formuler une chaîne 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>
Éléments à utiliser pour une recherche d’enregistrements
L’élément principal d’une recherche d’enregistrements est peersearch, qui contient l’URI (Uniform Resource Identifier) du schéma associé dans l’attribut xmlns . Lorsque peersearch est utilisé en tant qu’élément enfant, vous pouvez utiliser et, clause et ou comme éléments enfants.
et : l’élément et effectue une opération AND logique sur une ou plusieurs clauses contenues entre les balises d’ouverture et de fermeture. D’autres balises etet ou peuvent être des enfants, et les résultats récursifs de leurs clauses enfants sont inclus dans l’opération.
Par exemple, si vous souhaitez obtenir un enregistrement qui contient un nom égal à James Peters et une dernière mise à jour supérieure au 28/02/2003, ou une date de création inférieure au 31/01/2003, utilisez la chaîne de requête XML suivante :
<?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>
clause : l’élément clause spécifie une règle comparative de base qui compare la valeur d’un attribut d’enregistrement spécifique à la valeur contenue entre les balises d’ouverture et de fermeture. Le type et les attributs de comparaison doivent être fournis compare indique l’opération de comparaison à effectuer. Par exemple, une recherche simple qui indique que tous les enregistrements correspondants doivent avoir une valeur peercreatorid égale à James Peters apparaît dans la chaîne de requête XML comme suit :
<?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>
Les attributs de type courants incluent int, string et date. L’attribut date peut être l’un des formats de date standard décrits dans https://www.w3.org/TR/NOTE-datetime.
Les valeurs de l’attribut de comparaison sont égales, notequal, moins,greater, lessorequal et greaterorequal.
- ou : l’élément ou effectue une opération OU logique sur une ou plusieurs clauses contenues entre les balises d’ouverture et de fermeture. D’autres éléments ou et et peuvent être des enfants, et les résultats récursifs des clauses enfants sont inclus dans l’opération. Par exemple, si vous souhaitez obtenir un enregistrement qui contient un nom égal à James Peters, ou une dernière mise à jour comprise entre le 31/01/2003 et le 28/02/2003, utilisez la chaîne de requête XML suivante :
<?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>
Plus d’informations sur une recherche d’enregistrements
Le premier niveau de nœuds après peersearch ne peut avoir qu’un seul élément. Toutefois, les enfants suivants de cet élément peuvent avoir de nombreux éléments au même niveau.
La requête de recherche suivante est incorrecte :
<?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 requête échoue, car deux valeurs sont retournées pour la correspondance sans être résolues en une seule valeur true/false, ce qui signifie qu’une clause est une requête pour le nom d’un enregistrement égal à James Peters, et que l’opération AND correspond aux deux clauses de composant. Le résultat est deux valeurs logiques true/false qui sont contradictoires.
Pour obtenir tous les enregistrements qui contiennent un nom égal à James Peters et une dernière mise à jour comprise entre le 31/01/2003 et le 28/02/2003, placez la clause et les balises et qui sont au même niveau entre l’ouverture et la fermeture et les balises. L’exemple suivant montre que la requête a réussi :
<?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>
La liste suivante identifie d’autres informations spécifiques que vous devez connaître pour écrire une requête réussie :
- Les balises et etou ne peuvent pas se trouver entre les balises de clause d’ouverture et de fermeture, car, dans cette configuration, elles sont interprétées comme faisant partie de la valeur à mettre en correspondance, ce qui entraîne une erreur ou un échec de correspondance.
- Chaque paire de balises etet ou d’ouverture et de fermeture doit inclure au moins un ou plusieurs nœuds enfants.
- Un jeu d’éléments zéro n’est pas autorisé dans ce schéma.
Attributs d’enregistrement
En utilisant le schéma d’attribut d’enregistrement, un utilisateur peut créer des attributs d’enregistrement que l’attribut XML attrib dans un élément de clause spécifie. Les attributs d’un nouvel enregistrement sont ajoutés en définissant le membre pszAttributes de PEER_RECORD sur une chaîne XML au format spécifié dans le schéma.
L’infrastructure homologue réserve les noms d’attributs suivants :
- peerlastmodifiedby
- peercreatorid
- peerlastmodificationtime
- peerrecordid
- peerrecordtype
- peercreationtime
- peerlastmodificationtime
Caractères spéciaux
Certains caractères peuvent être utilisés pour exprimer des modèles de correspondance ou pour échapper d’autres caractères spéciaux. Ces caractères sont décrits dans le tableau ci-dessous.
Modèle de caractères | Description |
---|---|
* | Caractère générique. Lorsque ce caractère est rencontré dans une valeur de clause, il correspond à 0-n caractères de n’importe quelle valeur, y compris les caractères d’espace blanc et non alphabétiques. Exemple : « <clause attrib="peercreatorid » type="string » compare="equal">James P*</clause> » Cette clause correspond à toutes les valeurs peercreatorid avec un prénom de « James » et un nom commençant par « P ». |
\* | Astérisque échappé. Cette séquence correspond à un caractère astérisque. |
? | Caractère générique à caractère unique. Lorsque ce caractère est rencontré dans une valeur de clause, il correspond à n’importe quel caractère unique, y compris les espaces blancs et les caractères non alphabétiques. Par exemple : « <clause attrib="filename » type="string » compare="equal">data-0?.xml</clause> » Cette clause correspond aux valeurs de nom de fichier telles que « data-01.xml » et « data-0B.xml ». |
\? | Point d’interrogation d’échappement. Cette séquence correspond à un caractère de point d’interrogation. |
\\ | Barre oblique inverse d’échappement. Cette séquence correspond à un seul caractère de barre oblique inverse. |
Si la séquence de caractères n’est pas valide, la fonction PeerGroupSearchRecords retourne l’erreur E_INVALIDARG. Une séquence non valide est une séquence qui contient un caractère « \ » (barre oblique inverse) qui n’est pas immédiatement suivi d’un caractère « * » (astérisque), un « ? » (point d’interrogation), ou un autre caractère « \ » (barre oblique inverse).