Share via


Abfrageformat für die Datensatzsuche

Ein Aufruf der PeerGroupSearchRecords-Funktion erfordert einen XML-Abfragezeichenfolgenparameter, der verwendet wird, um die grundlegenden Kriterien einer Suche zu bestimmen. Verwenden Sie das folgende Schema, um eine XML-Zeichenfolge zu formulieren:

<?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> 

Das primäre Element in einer Datensatzsuche ist die Peersearch, die den URI (Uniform Resource Identifier) des zugeordneten Schemas im xmlns-Attribut enthält. Wenn peersearch als untergeordnetes Element verwendet wird, können Sie und, Klausel und oder als untergeordnete Elemente verwenden.

  • und : Das -Element und führt einen logischen AND-Vorgang für eine oder mehrere Klauseln aus, die zwischen den öffnenden und schließenden Tags enthalten sind. Andere tags und und oder können untergeordnete Elemente sein, und rekursive Ergebnisse ihrer untergeordneten Klauseln sind in den Vorgang eingeschlossen.

    Wenn Sie z. B. einen Datensatz mit einem Namen von James Peters und ein letztes Update größer als 28.02.2003 oder ein Erstellungsdatum abrufen möchten, das kleiner als 31.1.2003 ist, verwenden Sie die folgende XML-Abfragezeichenfolge:

    <?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>
    
  • -Klausel : Das -Klauselelement gibt eine grundlegende Vergleichsregel an, die den Wert eines bestimmten Datensatzattributes mit dem Wert vergleicht, der zwischen den öffnenden und schließenden Tags enthalten ist. Die Typ- und Vergleichsattribute müssen bereitgestellt werden . Vergleich gibt den auszuführenden Vergleichsvorgang an. Beispielsweise wird eine einfache Suche, die angibt, dass alle übereinstimmenden Datensätze einen Peercreatorid-Wert aufweisen müssen, der james Peters entspricht, in der XML-Abfragezeichenfolge wie folgt angezeigt:

    <?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>
    

    Allgemeine Typattribute sind "int", "string" und "date". Das date-Attribut kann eines der unter beschriebenen https://www.w3.org/TR/NOTE-datetimeStandarddatumsformate sein.

    Die Werte für das attribut compare sind gleich, notequal, less, greater, lessorequal und greaterorequal.

  • oder : Das -Element oder führt einen logischen OR-Vorgang für eine oder mehrere Klauseln aus, die zwischen den öffnenden und schließenden Tags enthalten sind. Andere oder und - und-Elemente können untergeordnete Elemente sein, und rekursive Ergebnisse der untergeordneten Klauseln sind in den Vorgang eingeschlossen. Wenn Sie z. B. einen Datensatz mit einem Namen von James Peters oder ein letztes Update zwischen dem 31.1.2003 und dem 28.02.2003 abrufen möchten, verwenden Sie die folgende XML-Abfragezeichenfolge:
<?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>

Die erste Knotenebene nach der Peersuche kann nur über ein Element verfügen. Nachfolgende untergeordnete Elemente dieses Elements können jedoch viele Elemente auf derselben Ebene aufweisen.

Die folgende Suchabfrage ist falsch:

<?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>

Die Abfrage schlägt fehl, da zwei Werte für die Übereinstimmung zurückgegeben werden, ohne in einen true/false-Wert aufgelöst zu werden. Dies bedeutet, dass eine Klausel eine Abfrage für den Namen eines Datensatzes ist, der James Peters entspricht, und der AND-Vorgang mit den beiden Komponentenklauseln übereinstimmt. Das Ergebnis sind zwei logische true/false-Werte, die widersprüchlich sind.

Um alle Datensätze abzurufen, die einen Namen wie James Peters und ein letztes Update zwischen dem 31.1.2003 und dem 28.02.2003 enthalten, platzieren Sie die -Klausel und - und -Tags, die sich auf derselben Ebene zwischen öffnen und schließen und Tags befinden. Das folgende Beispiel zeigt die erfolgreiche Abfrage:

<?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>

Die folgende Liste enthält weitere spezifische Informationen, die Sie kennen müssen, um eine erfolgreiche Abfrage zu schreiben:

  • Die Tags und und und oder können nicht zwischen öffnenden und schließenden Klauseltags gefunden werden, da sie in dieser Konfiguration als Teil des Werts interpretiert werden, mit dem abgeglichen werden soll, was zu einem Fehler oder einer fehlgeschlagenen Übereinstimmung führt.
  • Jedes Paar von und und undoder öffnenden und schließenden Tags muss mindestens einen untergeordneten Knoten enthalten.
  • Ein Satz von Elementen mit null ist in diesem Schema nicht zulässig.

Datensatzattribute

Mithilfe des Datensatzattributeschemas kann ein Benutzer Datensatzattribute erstellen, die das attrib-XML-Attribut in einem Klauselelement angibt. Attribute für einen neuen Datensatz werden hinzugefügt, indem das pszAttributes-Element von PEER_RECORD auf eine XML-Zeichenfolge festgelegt wird, die das im Schema angegebene Format verwendet.

Die Peerinfrastruktur reserviert die folgenden Attributnamen:

  • peerlastmodifiedby
  • peercreatorid
  • peerlastmodification
  • peerrecordid
  • peerrecordtype
  • peercreationtime
  • peerlastmodification

Sonderzeichen

Bestimmte Zeichen können verwendet werden, um übereinstimmende Muster auszudrücken oder andere Sonderzeichen zu escapen. Diese Zeichen werden in der folgenden Tabelle beschrieben.

Zeichenmuster BESCHREIBUNG
* Das Feldhalterzeichen. Wenn dieses Zeichen in einem Klauselwert gefunden wird, entspricht es 0-n Zeichen eines beliebigen Werts, einschließlich Leerzeichen und nichtalphanumerischen Zeichen. Beispiel:
"<clause attrib="peercreatorid" type="string" compare="equal">James P*</clause>"
Diese Klausel entspricht allen peercreatorid-Werten mit dem Vornamen "James" und einem Nachnamen, der mit "P" beginnt.
\* Ein escapefähiges Sternchen. Diese Sequenz entspricht einem Sternchen.
? Das einstellige Zeichenplatzhalterzeichen. Wenn dieses Zeichen in einem Klauselwert gefunden wird, entspricht es jedem einzelnen Zeichen, einschließlich Leerzeichen und nichtalphanumerischen Zeichen. Zum Beispiel:
"<clause attrib="filename" type="string" compare="equal">data-0?.xml</clause>"
Diese Klausel entspricht Dateinamenwerten wie "data-01.xml" und "data-0B.xml".
\? Ein Escapefragezeichen. Diese Sequenz entspricht einem Fragezeichen.
\\ Ein escaped backslash. Diese Sequenz entspricht einem einzelnen umgekehrten Schrägstrich.

Wenn die Zeichenfolge ungültig ist, gibt die PeerGroupSearchRecords-Funktion den Fehler E_INVALIDARG zurück. Eine ungültige Sequenz ist jede Sequenz, die ein "\" (umgekehrter Schrägstrich) enthält, nicht unmittelbar gefolgt von einem "*"-Zeichen (Sternchen) und einem "?" (Fragezeichen) oder ein anderes "\"-Zeichen (umgekehrter Schrägstrich).