thichxai
thichxai

Reputation: 1147

How to create MarkLogic TDE on XML documents

I would like to learn how to create Marklogic TDE. I have Marklogic 9.0-1.1 and inserted a document in top-songs database below.

 xdmp:document-insert("/songs/Akon-featuring-Snoop-Dogg-I-Wanna-Love-
       You.xml", 
<top-song xmlns="http://marklogic.com/MLU/top-songs">
    <title href="http://en.wikipedia.org/wiki/I_Wanna_Love_You" 
             xmlns:ts="http://marklogic.com/MLU/top-songs">I Wanna Love You</title>
    <artist href="http://en.wikipedia.org/wiki/Akon" 
              xmlns:ts="http://marklogic.com/MLU/top-songs">Akon featuring 
                        Snoop Dogg</artist>
   <weeks last="2006-12-09">
       <week>2006-12-02</week>
       <week>2006-12-09</week>
   </weeks>

   <album>Jade to the Max</album>

   <formats>
       <format>CD single</format>
       <format>Cassette single</format>
       <format>7" vinyl</format>
    </formats>

    <genres>
        <genre>R&amp;B</genre>
    </genres>

   <label>Giant Records</label>

   <descr>
       <p>&ldquo;I Wanna Love You&rdquo; is the title of a top-ten R&amp;B 
        single by Jade. It was the groups debut single, it was featured on 
        the Class Act soundtrack.&rdquo;</p> 
    </descr>
</top-song>
)

NOW I created Marklogic Template views in top-songs database. But I got errors "TDE-INVALIDTEMPLATE: (err:FOER0000) Invalid TDE template: TDE-INVALIDTEMPLATENODE: Invalid extraction template node: /tde:template/tde:context[2]". what am I missing ?

xquery version "1.0-ml"; 
import module namespace tde = "http://marklogic.com/xdmp/tde"
                              at "/MarkLogic/tde.xqy";

let $top-songs :=
  <template xmlns="http://marklogic.com/xdmp/tde">
    <context>/songs</context>
    <rows>
      <row>
        <schema-name>top-songs</schema-name>
        <view-name>songs</view-name>
        <columns>

          <column> 
            <name>title</name>
            <scalar>string</scalar>
            <val>title</val>
          </column>

          <column> 
            <name>artist</name>
            <scalar>string</scalar>
            <val>artist</val>
          </column>

          <column> 
            <name>weeks</name>
            <scalar>string</scalar>
            <val>weeks</val>
          </column>

          <column> 
            <name>week</name>
            <scalar>string</scalar>
            <val>week</val>
          </column>

          <column> 
            <name>album</name>
            <scalar>string</scalar>
            <val>album</val>
          </column>

          <column> 
            <name>format</name>
            <scalar>string</scalar>
            <val>format</val>
          </column>

          <column> 
            <name>genres</name>
            <scalar>string</scalar>
            <val>genres</val>
          </column>

          <column> 
            <name>label</name>
            <scalar>string</scalar>
            <val>label</val>
          </column>

          <column> 
            <name>descr</name>
            <scalar>string</scalar>
            <val>descr</val>
          </column>

        </columns>

      </row>
    </rows>

  </template> 
return tde:template-insert("/top-songs.xml",$top-songs)

Upvotes: 1

Views: 243

Answers (1)

Bharadwaj
Bharadwaj

Reputation: 93

  1. Your context node in the template should be the node that ML has to lookup for in the document you inserted. Your context document has <top-song> as the root node and there is no node with the name <songs>. So, your context node should be: <context>/top-song</context> or your context document should have <songs> as a node (under which you have the column and row elements).

  2. See that your schema-name is unique and does not contain Range Views.

Upvotes: 2

Related Questions