TDE — Удалить имя схемы и имя представления в имени столбца

#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