Как найти данный текст в XHTML-файле marklogic, например, clt+f

У меня ниже XHTML файл, сохраненный в marklogic с URI(/54ab8c234f3c8ce1f5c30ddc).

Мне нужно искать в базе данных Marklogic по строке (если это имя тега, имя атрибута или текст в XHTML).

Я могу искать только текст или атрибут. Но не в состоянии искать все одновременно.

Примечание: если я передам строку "SS_Default"(это значение атрибута), он вернет URI marklogic или, если я передам "META" (это имя тега), он должен вернуть соответствующие URI или, если я передам "Narrowed" "(это текст) должен возвращать URI соответствующего файла.

            <?xml version="1.0" encoding="UTF-8"?>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <meta>
            </meta>
        <body class="Default">

        </body>
    </html>

2 ответа

Решение

Виды поиска, которые вы пытаетесь выполнить, обычно выполняются не так, как другие, поскольку это разные типы данных. Например, если вы хотите найти "мета" и найти документы, содержащие этот элемент, вы запрашиваете структуру. Вы можете сделать это в MarkLogic с таким запросом:

cts:uris((), (), cts:element-query(xs:QName("meta"), ()))

Когда вы хотите найти "суженный", это просто текст, красивый и простой:

cts:uris((), (), "narrowed by")

Если вы хотите искать в атрибутах, это обычно делается путем указания атрибута, который вы хотите найти:

cts:uris((), (), cts:attribute-value-query(xs:QName("body"), xs:QName("class"), "SS_Default"))

Если вы хотите объединить их, вы можете выполнить запрос или. Я предлагаю просмотреть типы запросов, которые вы планируете выполнить, и посмотреть, можно ли их сегментировать таким образом. Как отмечает mholstege, вы можете загрузить документ в виде текста и иметь возможность искать все как строки, но при этом вы потеряете много значения в структуре, поэтому, вероятно, лучше отступить назад и подумать, действительно ли вам нужно запустить эти запрашивает так же.

При приеме внутрь можно использовать шаблон конверта, создав обертку вокруг исходного документа.

<envelope>
  <original>
    <html>...</html>
  </original>
  <plain-text>
    put the plain text content of your html here
  </plain-text>
</envelope>

Ваш текстовый поиск может быть выполнен только на элементе простого текста, и при возврате полученных документов вы можете вернуть элемент содержимого. Но, как упоминал Дейв, вы теряете ценную информацию. Здесь вы можете найти документацию о способах получения данных https://docs.marklogic.com/guide/ingestion

Другие вопросы по тегам