Xquery дает ошибку на стрелке на marklogi c qconsole - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь сделать простую вставку do c с фрагментом кода, предоставленным marklogi c.

xdmp:document-insert("/test/shipment1.xml", <shiporder orderid="889923">
  <orderperson>John Smith</orderperson>
  <shipto>
    <name>Ola Nordmann</name>
    <address>Langgt 23</address>
    <city value="BangaloreHighway">>4000 Stavanger</city>
    <country>Norway</country>
  </shipto>
  <item>
    <title>Empire Burlesque</title>
    <note>Special Edition</note>
<var>Special Edition in the industry</var>

    <quantity>1</quantity>
    <price>10.90</price>
  </item>
  <item>
    <title>Hide your heart</title>
    <quantity>1</quantity>
    <price>9.90</price>
  </item>
</shiporder>,  

map:map() => map:with("collections", ("PRACTICE"))
);

И это ошибка, которую я получаю при сборке строк.

[1.0-ml] XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected Gt_, expecting Function30_ or Percent_
Stack Trace
At line 32 column 11:
In xdmp:eval("xquery version &quot;1.0-ml&quot;;&#10;declare namespace html = ...", (), <options xmlns="xdmp:eval"><database>14078695328357470008</database><modules>99880860359119...</options>)

30. </shiporder>,
31.
32. map:map() => map:with("collections", ("PRACTICE"))
33. );
34

.

Ответы [ 2 ]

2 голосов
/ 31 января 2020

MarkLogic extension syntax используется, XQuery 3.1 применяется к (=>) операторы не поддерживаются в режиме 1.0-ml (они будут отлично работать MarkLogi c 9 и далее); Я полагаю, что вы используете MarkLogic 8 или старше.

Попробуйте использовать:

        xdmp:document-insert
        (
            "/test/shipment1.xml"
            , 
            <shiporder orderid="889923">
                <orderperson>John Smith</orderperson>
                <shipto>
                    <name>Ola Nordmann</name>
                    <address>Langgt 23</address>
                    <city value="BangaloreHighway">>4000 Stavanger</city>
                    <country>Norway</country>
                </shipto>
                <item>
                    <title>Empire Burlesque</title>
                    <note>Special Edition</note>
                    <var>Special Edition in the industry</var>
                    <quantity>1</quantity>
                    <price>10.90</price>
                </item>
                <item>
                    <title>Hide your heart</title>
                    <quantity>1</quantity>
                    <price>9.90</price>
                </item>
            </shiporder>
            ,  
            xdmp:default-permissions()
            ,
            "PRACTICE"
        );

Кроме того, я бы посоветовал вам ссылаться на сигнатуры функций для соответствующей версии MarkLogi c в MarkLogi c документах, например docs.marklogi c .com / 8,0 / xdmp: документ-вставка 1014 *.

1 голос
/ 03 февраля 2020

«Оператор стрелы» => доступен только начиная с версии X MarkLogi c (у меня нет точной версии под рукой, я думаю, что это где-то между 8 и 9.)

Вы можете использовать его в любой «версии» XQuery, поддерживаемой MarkLogi c (3.1, но также 1.0-ml). Следующие два выражения, с оператором стрелки и без него, дают одинаковый результат:

(: if you use 3.1 instead, you need to declare the namespace prefix "map" :)
xquery version "1.0-ml";

map:new((
  map:entry('foo', 1),
  map:entry('bar', 2)))
,
map:map()
  => map:with('foo', 1)
  => map:with('bar', 2)

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

map:entry('foo', 1)
,
map:map()
  => map:with('foo', 1)

Как уже упоминалось другими, в вашем конкретном примере вы можете просто передавать различные параметры. Но теперь вы знаете об операторе стрелка.

...