#sql #xquery #xquery-sql #marklogic-10
Вопрос:
Я пытаюсь создать простой шаблон SQL TDE для XML-документов в базе данных Marklogic.
Образец шаблона:
<template xmlns="http://marklogic.com/xdmp/tde">
<context>/match</context>
<collections>
<collection>source1</collection>
</collections>
<rows>
<row>
<schema-name>soccer</schema-name>
<view-name>matches</view-name>
<columns>
<column>
<name>id</name>
<scalar-type>long</scalar-type>
<val>id</val>
</column>
<column>
<name>document</name>
<scalar-type>string</scalar-type>
<val>docUri</val>
</column>
<column>
<name>date</name>
<scalar-type>date</scalar-type>
<val>match-date</val>
</column>
<column>
<name>league</name>
<scalar-type>string</scalar-type>
<val>league</val>
</column>
</columns>
</row>
</rows>
</template>
Я вставил образец документа в базу данных контента и приведенный выше шаблон в базу данных схем.
Теперь я пытаюсь выполнить SQL-запрос с помощью XQuery, как показано ниже:
xdmp:sql("select * from matches","map")
Приведенный выше запрос возвращает следующий ответ
soccer.matches.id | футбол.матчи.документ | футбол.матчи.дата | футбол.матчи.Лига |
---|---|---|---|
1234567 | /soccer/match/1234567.xml | 2016-01-12 | Premier |
В формате json это,
[
{
"soccer.matches.id": 1234567,
"soccer.matches.document": "/soccer/match/1234567.xml",
"soccer.matches.date": "2016-01-12",
"soccer.matches.league": "Premier"
}
]
В приведенном выше ответе имя ключа возвращается как имя схемы.имя представления.имя столбца.Например,soccer.matches.id
Но мне нужно, чтобы имя ключа содержало только имя столбца.Например, «идентификатор»: 1234567
Не мог бы кто-нибудь поделиться самым простым способом достижения этой цели в XQuery?
Ответ №1:
Вероятно, вы могли бы указать имена в инструкции SQL, используя AS. Вы всегда можете повторить результаты в инструкции FLWOR, чтобы изменить свои результаты.
Тем не менее, я предлагаю вам использовать оптический API и настраивать результаты по своему усмотрению.
Использование an op:from-view
было бы предлагаемым курсом действий. Ты все еще можешь пригодиться op:from-sql()
. В обоих случаях поэкспериментируйте с параметром-определителем, включая его опущение . Для получения окончательных результатов вы можете использовать op:as()
» с op:select()
» или op:group-by()
точно определить, что вы хотите.
Ссылка на оптический API: https://docs.marklogic.com/guide/app-dev/OpticAPI
Оптические функции: https://docs.marklogic.com/op