Bonjour, j'utilise MarkLogic 9.0 et j'ai un niveau d'expérience débutant avec ML et XML. J'ai suivi le MarkLogic SQL Guide avec succès et je veux l'utiliser dans le monde réel et extraire des fichiers xml transactionnels l'élément type. Mais dans la vue que j'ai créée retourne un résultat vide. Je pense que cela a quelque chose à voir avec le xsd et le xsi. Mais comme je l'ai mentionné plus tôt, je suis à un niveau débutant et je ne sais pas comment résoudre ce problème.MarkLogic TDE sur documents XML avec XSD et XSI
Le texte suivant décrit le scénario pour reproduire le problème.
Je charge 3500 documents xml dans le SQLData (avec triple index de magasin) J'ai également créé une base de données SQLSchema qui est liée à la base de données SQLData comme décrit dans le Guide. Tous les documents XML a une structure similaire à l'exemple ci-dessous:
<?xml version="1.0" encoding="UTF-8"?>
<scope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<item>
<transaction>
<type>CI</type>
<sscc>00000379461100000007</sscc>
<location>4260210630688</location>
<device>VISTALINK.004</device>
<date>2017-04-25</date>
<time>01:22:20</time>
<gmtOffset>+02:00</gmtOffset>
<actorId>155081</actorId>
</transaction>
<order>
<orderNumber>3794611</orderNumber>
</order>
</item>
</scope>
avec un URI comme celui-ci (tous les documents a une structure similaire):
/transactions/2017-04-25_01-22-20_3794611_00000379461100000007_CI.xml
Maintenant, je créé un modèle avec la structure suivante:
xquery version "1.0-ml";
import module namespace tde = "http://marklogic.com/xdmp/tde"
at "/MarkLogic/tde.xqy";
let $transactions :=
<template xmlns="http://marklogic.com/xdmp/tde">
<context>/transactions</context>
<rows>
<row>
<schema-name>main</schema-name>
<view-name>transactions</view-name>
<columns>
<column>
<name>type</name>
<scalar-type>string</scalar-type>
<val>type</val>
</column>
</columns>
</row>
</rows>
</template>
return tde:template-insert("Transactions.xml", $transactions)
je aussi changer le contexte:
<context>item</context>
et /article
Il ne retourne pas d'erreur, donc je pense que le résultat sera bien
Quand j'exécutez l'instruction suivante dans la console SQL retourne un résultat vide:
select * from transactions;
Quand je valident le modèle ci-dessus, il renvoie le résultat folowing:
<map:map xmlns:map="http://marklogic.com/xdmp/map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<map:entry key="valid">
<map:value xsi:type="xs:boolean">false</map:value>
</map:entry>
<map:entry key="error">
<map:value xsi:type="xs:string">TDE-INVALIDTEMPLATENODE</map:value>
</map:entry>
<map:entry key="message">
<map:value xsi:type="xs:string">TDE-INVALIDTEMPLATENODE: Invalid extraction template node: /tde:template/tde:rows/text()</map:value>
</map:entry>
</map:map>
Ainsi, l'erreur en validant est:
Invalid extraction template node: /tde:template/tde:rows/text()
Invalid extraction template node:
/TDE: template/TDE: lignes/texte()
Est-ce que quelqu'un sait comment je peux résoudre ce problème?
Peut-être que ce n'est qu'une simple erreur. Vous avez '/transactions ', mais le contexte est comme une expression de correspondance XSLT, pas un filtre de répertoire. Vous voulez probablement changer la valeur en 'transaction' ou' item', puisqu'il n'y a pas d'élément avec le nom 'transactions'. –
grtjn
Merci pour la réponse. J'essaie de changer la valeur de l'élément de contexte en item ou en transaction tous les deux obtiennent le même résultat (voir ajuster la question). –
J'ajuste maintenant quelques informations supplémentaires sur les résultats de validation –