Поделиться через


Формат запроса поиска записей

Для вызова функции 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. Недопустимая последовательность — это любая последовательность, содержащая символ "\" (обратная косая черта), за которой не сразу следует символ "*" (звездочка), "?" (вопросительный знак) или другой символ "\" (обратная косая черта).