2016-02-05 8 views
1

Я пытаюсь использовать mapforce для создания файла xslt 2.0. Отображение добавляет два элемента dayTimeDuration, при этом возникает следующая ошибка;MapForce - Добавить dayTimeDuration to dayTimeDuration

Нет совпадений для core.add (xs: dayTimeDuration, xs: dayTimeDuration). Проверьте типы аргументов. Поддерживается: + (xs: double, xs: double) -> xs: double

Я думал, что xslt 2.0 поддерживает добавление 2 dayTimeDurations. Есть ли способ сделать это, используя mapforce?

Приветствия Рагу

+0

https://www.w3.org/TR/xpath-functions-30/#func-add-dayTimeDurations предполагает, что это возможно. Я понятия не имею о MapForce. Возможно, лучше спросить на форуме поддержки. –

+0

Мартин, спасибо за подтверждение, можно в xslt 2.0. Я его разместил на своем форуме, но не получил никаких ответов. – stew

ответ

1

Имеет почти такую ​​же проблему, сначала попытался добавить functx-library, но увидел, что она создает абсолютный путь в сгенерированном xslt2-коде, что не очень хорошо.

Ну, оказывается, можно реализовать эту функцию, но сначала вы должны сделать некоторые изменения ...

Найдите каталог установки MapForce и MapForceLibraries -subdirectory. Из того, что открыть «core.mff», и найти

<group name="math functions"> 
    <component name="add" growable="true" growablebasename="value"> 
     <sources> 
      <datapoint name="value1" type="xs:decimal"/> 
      <datapoint name="value2" type="xs:decimal"/> 
     </sources> 
     <targets> 
      <datapoint name="result" type="xs:decimal"/> 
     </targets> 

Как может показаться на «источники» и «цели» элементы, кажется, определить в- или из типов данных. Как бы то ни было, они только реализовали «add» -функцию для «xs: decimal». Вы можете скопировать/вставить этот компонент, затем переименовать его и предоставить новые типы данных, в вашем случае они оба «xs: dayTimeDuration». Обратите внимание, что существуют реализации для каждого поддерживаемого языка, но вы можете опустить те, которые не нужны. Вот должно работать:

<component name="addDayTimeDuration" growable="true" growablebasename="value"> 
    <sources> 
     <datapoint name="value1" type="xs:dayTimeDuration"/> 
     <datapoint name="value2" type="xs:dayTimeDuration"/> 
    </sources> 
    <targets> 
     <datapoint name="result" type="xs:dayTimeDuration"/> 
    </targets> 
    <implementations> 
     <implementation language="xslt"> 
      <operator value="+"/> 
     </implementation> 
     <implementation language="xslt2"> 
      <operator value="+"/> 
     </implementation> 
     <implementation language="builtin"> 
      <function name="Core_Add"/> 
     </implementation> 
    </implementations> 
    <description> 
     <short>result = value1 + value2</short> 
     <long>Result is the dayTimeDuration value of adding value1 and value2.</long> 
    </description> 
</component> 

Ваша новая функция должна появиться в «математические функции» и должны быть хорошо использовать.

0

После контакта Altova (производители MapForce); Хотя XPath 2 предлагает операцию subtract-dayTimeDurations, в настоящее время это не предлагается как функция внутри MapForce.

+0

Ну, вы всегда можете сделать это сами. –

+0

Да, я написал xslt и импортировал его как библиотеку. Проблема в том, что MapForce ставит абсолютный путь в библиотеку, что отлично подходит для разработки, но не так хорошо для производства. – stew

+0

Ответ Алтовой на проблему абсолютного пути; Это невозможно. Вам нужно будет отредактировать созданный XSLT. Я отправлю этот вопрос нашей команде разработчиков для дальнейшего рассмотрения. – stew