1

我正在尝试使用 mapforce 生成 xslt 2.0 文件。映射添加了 2 个 dayTimeDuration 元素,这样做会导致以下错误;

core.add(xs:dayTimeDuration, xs:dayTimeDuration) 不匹配。检查参数类型。支持:+(xs:double, xs:double) -> xs:double

我认为 xslt 2.0 支持添加 2 dayTimeDurations。有没有办法使用 mapforce 来做到这一点?

干杯炖菜

4

2 回答 2

1

遇到了几乎相同的问题,首先尝试添加functx-library,但看到它在生成的xslt2-code 中创建了绝对路径,这不是很好。

好吧,事实证明您可以实现该功能,但首先您必须进行一些修改......

找到您的 Mapforce 安装目录和 MapForceLibraries -子目录。从那里打开“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>

如您所见,“源”和“目标”元素似乎定义了输入和输出数据类型。事实上,他们只为“xs:decimal”实现了“add”功能。您可以复制/粘贴此组件,然后重命名它并提供新的输入输出数据类型,在您的情况下它们都是“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>

您的新函数现在应该出现在“数学函数”中并且应该很好用。

于 2016-02-17T11:30:06.693 回答
0

联系 Altova(MapForce 的制造商)后;虽然 XPath 2 确实提供了减天时间持续时间操作,但目前在 MapForce 中并未将其作为函数提供。

于 2016-02-08T22:51:43.223 回答