レコード検索クエリ形式
PeerGroupSearchRecords 関数を呼び出すには、検索の基本的な条件を決定するために使用される XML クエリ文字列パラメーターが必要です。 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>
レコード検索に使用する要素
レコード検索のプライマリ要素は peersearch です。このピアサーチには、関連付けられているスキーマの URI (Uniform Resource Identifier) が xmlns 属性に含まれています。 peersearch を子要素として使用する場合は、and 句、句、または を子要素として使用できます。
and - and 要素は、開始タグ と 終了タグの間に含まれる 1 つ以上の句に対して論理 AND 演算を実行します。 その他 の およびタグや タグは子にすることができ、その子句の再帰的な結果が操作に含まれます。
たとえば、James Peters と等しい名前と、2003 年 2 月 28 日より大きい最終更新、または 2003 年 1 月 31 日未満の作成日を含むレコードを取得する場合は、次の XML クエリ文字列を使用します。
<?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 - clause 要素は、特定のレコード属性の値と開始タグと終了タグの間に含まれる値を比較する基本的な比較規則を指定します。 type 属性と compare 属性を指定する必要がある compare は、実行する比較操作を示します。 たとえば、一致するすべてのレコードに James Peters と等しい peercreatorid 値が必要であることを示す単純な検索は、次のように XML クエリ文字列に表示されます。
<?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>
一般的な 型 属性には、 int、 string、 date があります。 date 属性には、 でhttps://www.w3.org/TR/NOTE-datetime説明されている標準の日付形式のいずれかを指定できます。
compare 属性の値は、等しい、notequal、less、greater、lessorequal、および greaterorequal です。
- または - 要素または 要素は、開始タグと終了タグの間に含まれる 1 つ以上の句に対して論理 OR 演算を実行します。 その他 の 要素またはおよび 要素は子にすることができ、子句の再帰的な結果が操作に含まれます。 たとえば、James Peters と等しい名前を含むレコード、または 2003 年 1 月 31 日から 2003 年 2 月 28 日までの最後の更新プログラムを含むレコードを取得する場合は、次の XML クエリ文字列を使用します。
<?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>
レコード検索の詳細
peersearch の後のノードの最初のレベルは、要素を 1 つだけ持つことができます。 ただし、その要素の後続の子には、同じレベルの多くの要素を含めることができます。
次の検索クエリが正しくありません。
<?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>
1 つの true/false 値に解決されずに一致に対して 2 つの値が返されるため、クエリは失敗します。つまり、1 つの句は James Peters と等しいレコードの名前のクエリであり、AND 操作は 2 つのコンポーネント句と一致します。 結果は、矛盾する 2 つの論理 true/false 値になります。
James Peters と等しい名前を含むすべてのレコードと、2003 年 1 月 31 日から 2003 年 2 月 28 日までの最後の更新を含むすべてのレコードを取得するには、句とタグを、開始と終了とタグの間で同じレベルに配置します。 次の例は、正常なクエリを示しています。
<?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>
次の一覧は、クエリを正常に記述するために知っておくべきその他の特定の情報を示しています。
- および またはタグは、開始句タグと終了句タグの間に配置できません。これは、その構成では、一致する値の一部として解釈され、エラーまたは一致に失敗するためです。
- タグと 開始タグまたは終了タグの各ペアには、少なくとも 1 つ以上の子ノードが含まれている必要があります。
- このスキーマでは、0 個の要素セットは使用できません。
レコード属性
レコード属性スキーマを使用すると、句要素の attrib XML 属性が指定するレコード属性を作成できます。 新しいレコードの属性は、スキーマで指定された形式を使用して、PEER_RECORDの pszAttributes メンバーを XML 文字列に設定することによって追加されます。
ピア インフラストラクチャは、次の属性名を予約します。
- peerlastmodifiedby
- peercreatorid
- peerlastmodificationtime
- peerrecordid
- peerrecordtype
- peercreationtime
- peerlastmodificationtime
特殊文字
一致するパターンを表したり、他の特殊文字をエスケープしたりするために、特定の文字を使用できます。 これらの文字については、次の表で説明します。
文字パターン | 説明 |
---|---|
* | ワイルドカード文字。 句値でこの文字が検出されると、空白文字や英数字以外の文字など、任意の値の 0 から n 文字に一致します。 たとえば次のような点です。 "<clause attrib="peercreatorid" type="string" compare="equal">James P*</clause>" この句は、名が "James" で、姓が "P" で始まるすべての peercreatorid 値と一致します。 |
\* | エスケープされたアスタリスク。 このシーケンスはアスタリスク文字と一致します。 |
? | 1 文字のワイルドカード文字。 句値でこの文字が検出されると、空白文字や英数字以外の文字を含む任意の 1 文字と一致します。例えば: "<clause attrib="filename" type="string" compare="equal">data-0?.xml</clause>" この句は、"data-01.xml" や "data-0B.xml" などの ファイル名 の値と一致します。 |
\? | エスケープされた疑問符。 このシーケンスは疑問符文字と一致します。 |
\\ | エスケープされた円記号。 このシーケンスは、1 つの円記号文字と一致します。 |
文字シーケンスが無効な場合、 PeerGroupSearchRecords 関数はエラー E_INVALIDARGを返します。 無効なシーケンスは、"*" (アスタリスク) 文字 、"?" の直後にない "\" (円記号) 文字を含むシーケンスです。(疑問符) 文字、または別の "\" (円記号) 文字。