Формат запроса поиска записей
Для вызова функции 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) связанной схемы в атрибуте xmlns . Если peersearch используется в качестве дочернего элемента, в качестве дочерних элементов можно использовать и , предложение и или .
и — элемент и выполняет логическую операцию AND с одним или несколькими предложениями, содержащимися между открывающим и закрывающим тегами. Другие теги и и или могут быть дочерними, а рекурсивные результаты их дочерних предложений включаются в операцию.
Например, если вы хотите получить запись, содержащую имя, равное Имени Джеймса Питерса, и последнее обновление, которое больше 28.02.2003, или дату создания меньше 31.01.2003, используйте следующую строку 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 — элемент предложения задает базовое правило сравнения, которое сравнивает значение определенного атрибута записи со значением, содержащимся между открывающим и закрывающим тегами. Необходимо указать атрибуты типа и сравнения, указывающие на выполняемую операцию сравнения. Например, простой поиск, указывающий, что все совпадающие записи должны иметь значение 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. Атрибут даты может быть одним из стандартных форматов дат, описанных в .https://www.w3.org/TR/NOTE-datetime
Значения атрибута compare : equal, notequal, less, greater, lessorequal и greaterorequal.
- или — элемент или выполняет логическую операцию OR с одним или несколькими предложениями, содержащимися между открывающим и закрывающим тегами. Другие элементы или и и могут быть дочерними, а рекурсивные результаты дочерних предложений включаются в операцию. Например, если вы хотите получить запись, содержащую имя, равное James Peters, или последнее обновление между 31.01.2003 и 28.02.2003, используйте следующую строку ЗАПРОСА 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 может содержать только один элемент. Однако последующие дочерние элементы этого элемента могут содержать несколько элементов на одном уровне.
Следующий поисковый запрос неверен:
<?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>
Запрос завершается сбоем, так как два значения возвращаются для совпадения без разрешения в одно значение true/false. Это означает, что одно предложение является запросом на имя записи, равное Джеймсу Питерсу, а операция AND соответствует двум предложениям компонентов. Результатом являются два логических значения true/false, которые являются противоречивыми.
Чтобы получить все записи, которые содержат имя, равное James Peters, и последнее обновление между 31.01.2003 и 28.02.2003, поместите предложениеи теги и на одном уровне между открытием и закрытием и тегами. В следующем примере показан успешный запрос:
<?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>
В следующем списке указаны другие конкретные сведения, которые необходимо знать для успешного создания запроса:
- Теги и и или не могут находиться между открывающими и закрывающими тегами предложения , так как в такой конфигурации они интерпретируются как часть значения для сопоставления, что приводит к ошибке или сбою совпадения.
- Каждая пара и и или открывающих и закрывающих тегов должна содержать по крайней мере один или несколько дочерних узлов.
- В этой схеме не допускается нулевой набор элементов.
Атрибуты записи
Используя схему атрибута записи, пользователь может создавать атрибуты записи, которые указывает атрибут ATTRIB XML в элементе предложения. Атрибуты для новой записи добавляются путем задания члену pszAttributesPEER_RECORD xml-строки в формате, указанном в схеме.
Одноранговая инфраструктура резервирует следующие имена атрибутов:
- peerlastmodifiedby
- peercreatorid
- peerlastmodificationtime
- peerrecordid
- peerrecordtype
- peercreationtime
- peerlastmodificationtime
Специальные символы
Некоторые символы можно использовать для выражения шаблонов сопоставления или для экранирования других специальных символов. Эти символы описаны в таблице ниже.
Шаблон символов | Описание |
---|---|
* | Подстановочный знак. Если этот символ встречается в значении предложения, он соответствует 0–n символам любого значения, включая пробелы и неалкогонно-цифровые символы. Пример: "<clause attrib="peercreatorid" type="string" compare="equal">James P*</clause>" Это предложение сопоставляет все значения peercreatorid с именем "James" и фамилией, начинающиеся с "P". |
\* | Сбежав звездочку. Эта последовательность соответствует символу звездочки. |
? | Подстановочный знак с одним символом. При обнаружении этого символа в значении предложения он соответствует любому отдельному символу, включая пробелы и неалкогонно-цифровые символы. Например: "<clause attrib="filename" type="string" compare="equal">data-0?.xml</clause>" Это предложение соответствует значениям имени файла , таким как "data-01.xml" и "data-0B.xml". |
\? | Экранированный вопросительный знак. Эта последовательность соответствует символу вопросительного знака. |
\\ | Экранированная обратная косая черта. Эта последовательность соответствует одному символу обратной косой черты. |
Если последовательность символов недопустима, функция PeerGroupSearchRecords возвращает ошибку E_INVALIDARG. Недопустимая последовательность — это любая последовательность, содержащая символ "\" (обратная косая черта), за которой не сразу следует символ "*" (звездочка), "?" (вопросительный знак) или другой символ "\" (обратная косая черта).