Допустимые имена значений для TDE извлечения на основе шаблонов

#xml #types #marklogic

#xml #типы #marklogic

Вопрос:

Мой вопрос заключается в том, как я могу успешно применить шаблон к данным, которые не соответствуют спецификациям XML. У меня есть входящие данные с именами элементов, такими значениями, как:

Пример документа, извлеченного с помощью fn:doc ($uri):

 {
"ID": "208455", 
"Type": "Deductions", 
"MONTH": "1", 
"2015 - Joe's": "14.10%", 
}
  

Часть, которой я хотел бы управлять с помощью моего TDE, это:

«2015 — Joe’s»: «14,10%»

Где само значение является строкой.

Я хотел бы привести значение к десятичной системе счисления, используя шаблон TDE, например, удалив «%». Это работает при выполнении в консоли запросов:

 let $s1:= "14.10%"

return fn:number(fn:replace($s1, "[^0-9.]", ""))

###
14.1 (float)
  

Однако при выполнении одних и тех же связанных функций внутри шаблона:

     <column>
      <name>value_2015</name>
      <scalar-type>string</scalar-type>
      <val>fn:number(fn:replace(2015 - Joe's, "[^0-9.], ""))</val>
      <nullable>true</nullable>
    </column>
  

Я получаю Compile for Column value_2015='fn:replace(2015 - Joe's, "[^0-9.], "")' returns XDMP-BADCHAR: (err:XPST0003) Unexpected character found ''' (0x0027) ошибку. Я полагаю, это связано с тем, что имя поля начинается с цифры и содержит символ «‘», что является нарушением приведенной здесь спецификации XML.

Следовательно, я попытался обернуть ссылку на элемент с помощью «»:

       <column>
      <name>value_2015</name>
      <scalar-type>string</scalar-type>
      <val>fn:replace("2015 - Joe's", "[^0-9.], "")</val>
      <nullable>true</nullable>
  

но это, конечно, возвращает другую ошибку BADCHAR: XDMP-BADCHAR: (err:XPST0003) Unexpected character found '"' (0x0022) поскольку теперь у нас есть кавычки в ссылке на элемент.

Как бы я вообще это исправил? Если я не могу ссылаться на элементы, как мне заменить их допустимыми именами элементов XML? Есть ли у меня какие-либо опции, которые мне нравятся, экранируют XML и сообщают шаблону найти буквальное соответствие для заданной последовательности символов в аргументе?

Комментарии:

1. Можете ли вы показать пример исходного XML, к которому вы применяете TDE?

2. Добавлен пример документа, который был извлечен с помощью fn:doc ($ uri)

Ответ №1:

Работает ли использование node («2015 — Joe’s») или text («2015 — Joe’s») в качестве первого аргумента fn:replace()?

Это должно соответствовать текстовому значению с именем свойства «2015 — Joe’s»

Комментарии:

1. Большое вам спасибо. Фрагмент кода fn:заменить(текст(«недопустимое имя xml»), «[^0-9.], «») в качестве аргумента val, похоже, работает точно так, как ожидалось. Приносим извинения за медленное принятие ответа.