xquery函数
功能数据功能
FME提供了几个可以在XQuery脚本中使用的功能。这些函数允许XQuery脚本和模板访问和操作特性属性值。所有功能函数的前缀都是FME命名空间前缀。
此函数从当前功能中检索属性的值。它有两个声明:
fme:get属性(
fme:get属性(
如果提供了第二个参数,并且该特性没有给定属性名的值,函数只返回第二个参数的值。第二个参数可以是任何类型的xquery值:string,数,XML节点,嵌套函数调用,等。
如果没有提供第二个参数,对于给定的属性,该特性没有值,函数只返回一个空序列。
此函数返回的字符串值将在使用它们的上下文中转换为可序列化的。特别地,如果将该值插入到XML文档中,任何XML语法都将被转义。例如,<字符将变为<和>将成为>.这个获取XML属性函数可用于返回XML节点。同样地,如果将该值插入到JSON文档中,该值将用引号括起来,保留字符将被转义。这个获取json属性可用于返回JSON对象或数组。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
奥腊涅斯塔德 |
位置 |
|
fme:get attribute函数返回以下结果:
函数 | 结果 |
---|---|
|
|
|
|
{ “位置”:fme:get属性(“位置”)。 } |
{ “位置”:
} |
此函数从当前功能中检索列表属性的内容。它还具有两个声明:
获取列表属性(
获取列表属性(
如果没有提供分隔符参数,函数将返回列表属性作为单个项的序列。如果提供分隔符参数,函数将列表属性的内容序列化为单个字符串,使用分隔符参数的值作为分隔符。
如同fme:get属性函数,此函数返回的所有字符串值都将转换为有效的XML或JSON字符串,取决于函数调用的上下文。这个获取XML列表属性函数可用于检索XML节点列表,以及获取json列表属性函数可用于检索JSON对象或数组的列表。
例子:
考虑具有以下属性的功能:
属性 |
价值 |
---|---|
日期{ 0 } |
21-082010 |
日期{ 1 } |
22-082010 |
日期{ 2 } |
23-082010 |
fme:get list attribute函数返回以下结果:
函数 | 结果 |
---|---|
|
|
fme:get list属性(“日期”,“,”(}) |
|
{ “日期”:fme:get list属性(“日期”)。 } |
{ “日期”:[“21-08-2010”,“22-082010”“23-082010” } |
此函数检索包含XML节点的属性。它只有一个声明:
获取XML属性(
如果给定的属性包含XML文本,此函数将解析文本并返回XML节点。如果属性不包含XML文本,函数将返回空序列。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
奥腊涅斯塔德 |
位置 |
|
fme:get xml attribute函数返回以下结果:
函数 | 结果 |
---|---|
fme:get xml属性(“位置”)。 |
|
fme:get xml属性(“name”)。 |
此函数类似于fme:get xml attribute函数,但检索列表属性。它有两个声明:
获取XML列表属性(
获取XML列表属性(
函数试图将list属性中的每个值解析为xml节点。将跳过无效xml的值。如果提供了分隔符参数,它将被复制到每个解析的XML值之间的返回序列中。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
人{ 0 } |
|
人{ 1 } |
|
人{ 2 } |
|
fme:get xml list attribute函数的用法如下:
函数 | 结果 |
---|---|
|
|
此函数检索包含JSON对象或数组的属性。它只有一个声明:
获取json属性(
如果给定的属性包含JSON值,此函数将解析文本并返回JSON对象或数组。如果属性不包含JSON文本,函数将返回空序列。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
奥腊涅斯塔德 |
位置 |
{ “type”:“点”, “X”:-70.037, “Y”:12.519 } |
这个获取json属性函数返回以下结果:
函数 | 结果 |
---|---|
“位置”:fme:get json属性(“位置”) |
{ “位置”: { “type”:“点”, “X”:-70.037, “Y”:12.519 } } |
fme:get json属性(“name”) |
此函数类似于fme:get-json属性函数,但检索列表属性。它只有一个声明:
获取json列表属性(
函数尝试将list属性中的每个值解析为JSON对象或数组。将跳过无效JSON的值。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
人{ 0 } |
{ “name”:“约翰·杜”, “年龄”:25 } |
人{ 1 } |
{ “name”:“胡安·多明戈”, “年龄”:27 } |
人{ 2 } | { “name”:“Johann Deuter”, “年龄”:29 } |
这个获取json属性功能可使用如下所示:
函数 | 结果 |
---|---|
{ “人”:fme:get json list属性(“人”)。 } |
{ “人”: { “name”:“约翰·杜”, “年龄”:25 } { “name”:“胡安·多明戈”, “年龄”:27 } { “name”:“Johann Deuter”, “年龄”:29 } ] } |
此功能允许访问功能的坐标系。如果特征具有坐标系,函数将返回坐标系的名称。如果特征没有坐标系,不会返回任何值。
此函数非常简单。它返回一个布尔值(真/假),指示当前功能上是否存在属性。它有一个声明:
FME:有属性(
例子:
考虑一个只有一个属性的特性:“名称”。FME:有属性函数返回以下结果:
函数 | 结果 |
---|---|
FME:有属性(“名称“) |
真 |
FME:有属性(“身份证件“) |
假 |
此函数返回一个布尔值(真/假),指示当前功能上是否存在作为参数列出的所有属性。它有一个声明:
FME:具有所有属性(
例子:
考虑具有“name”和“id”属性的功能。FME:具有所有属性函数返回以下结果:
函数 | 结果 |
---|---|
具有所有属性(“名称”)。 |
真 |
具有所有属性(“名称”,“ID” |
真 |
FME:具有所有属性(“otherattr”)。 |
假 |
具有所有属性(“名称”,“其他”“ID” |
假 |
此函数返回一个布尔值(真/假),该值指示当前功能上是否存在作为参数列出的任何属性。它有一个声明:
FME:有任何属性(
例子:
考虑具有“name”和“id”属性的功能。FME:有任何属性函数返回以下结果:
函数 | 结果 |
---|---|
有任何属性(“名称”)。 |
真 |
有任何属性(“名称”,“ID” |
真 |
FME:有任何属性(“其他属性”)。 |
假 |
有任何属性(“名称”,“其他”“ID” |
真 |
此函数设置功能属性的值。它有两个声明:
设置属性(
设置属性(
功能属性将设置为值序列的序列化值。如果序列包含多个值,这些值将连接成一个带分隔符的字符串,属性将被设置为这个连接的值。默认分隔符是逗号,但第三个参数可用于提供不同的分隔符。
此函数不返回值。
例子
下面的XML文档是本节中示例的上下文项。
五百八十三点七七六
运行以下查询后:
fme:set属性(“name_xml”,/国家/名称)
设置属性(“区域”,/国家/地区/text()),
设置属性(“城市列表”,/国家/城市/城市/text()),
fme:set属性(“城市列表2”,/国家/城市/城市/文本(),“*”
该功能具有以下属性:
属性 | 价值 |
---|---|
NAMEXXML |
|
地区 |
五百八十三点七七六 |
城市排行榜 |
普利茅斯 |
CITYYLIST2 |
普利茅斯国旗 |
此函数与fme:附加属性函数,但它附加了一个特性属性的值,而不是替换属性值。它有两个声明:
fme:附加属性(
fme:附加属性(
值序列的序列化值将附加到feature属性。如果序列包含多个值,在附加到属性之前,这些值将连接到一个带分隔符的字符串中。默认分隔符是逗号,但第三个参数可用于提供不同的分隔符。
此函数不返回值。
此函数设置功能列表属性的值。它只有一个声明:
设置列表属性(
函数将序列中的每个值序列化为list属性中的元素。
此函数不返回值。
例子:
下面的XML文档是本节中示例的上下文项。
运行以下查询后:
设置列表属性(“名称”,/国家/国家/名称/text()),
设置列表属性(“大写”,/国家/国家/资本)
该功能具有以下属性:
属性 | 价值 |
---|---|
名称{ 0 } |
蒙特塞拉特 |
名称{ 1 } |
圣诞岛 |
名称{ 2 } |
阿鲁巴 |
资本{ 0 } |
|
资本{ 1 } |
|
资本{ 2 } |
|
此函数与设置列表属性函数,但它附加到list属性,而不是覆盖现有值。它只有一个声明:
fme:附加列表属性(
函数将序列中的每个值序列化为list属性中的元素。将保留现有列表值,将新值附加到列表末尾。
此函数不返回值。
特征处理功能
使用XMLTEMPLAR和杰森特普拉特,模板可以包括处理子模板的结果。有两个函数允许处理子模板。
此函数将评估模板,或一组模板,通过相应的输入端口进入变压器的特性。函数将返回被处理的子模板的值。此函数有两个声明:
FME:过程特征( )
FME:过程特征(
,
在这两种情况下,第一个参数是模板名,或模板名称列表。如果没有给出其他参数,该函数将对通过与这些模板对应的输入端口输入变压器的所有功能执行列出的模板。这些特性将按照它们到达变压器的顺序进行处理。
第二和第三个参数可用于过滤要处理的特征。第二个参数应包含属性名,或属性名称列表。第三个参数应包含属性值,或值列表。这些参数应始终具有相同的列出项目数。调用函数时,它将仅对符合以下条件的功能执行列出的子模板:
- 该特性通过对应于第一个参数中列出的模板之一的一个输入端口输入变压器。
- 对于第二个参数中列出的每个属性,功能的属性值与第三个参数中的相应值匹配。
例子:
以下函数调用将对通过房屋输入端口输入变压器的所有功能执行房屋子模板。
FME:过程特征(“房屋”)。
以下函数调用将对通过房屋输入端口输入变压器的所有功能执行房屋子模板,以及通过业务输入端口输入的所有功能的业务子模板。这些特性将按照它们到达变压器的顺序进行处理。
FME:过程特征((“房子”,“业务”)
以下函数调用将对通过房屋输入端口输入变压器的所有功能执行房屋子模板,谁的纽曼楼属性等于3。
FME:过程特征(“豪斯”,“数字地板”,3)
以下函数调用将对通过房屋输入端口输入变压器的所有功能执行房屋子模板,谁的维拉吉属性等于身份证件当前正在处理的功能的属性。
FME:过程特征(“豪斯”,“乡村别墅”fme:get属性(“id”))
以下函数调用将对通过房屋输入端口输入变压器的所有功能执行房屋子模板,谁的纽曼楼属性等于3,谁的维拉吉属性等于身份证件当前正在处理的功能的属性。
FME:过程特征(“豪斯”,(Nuff地板)“VielaGigID”(3)fme:get属性(“id”))
此函数将评估模板,或一组模板。不像FME:过程特征函数,它将在与包含函数调用的模板相同的功能上评估模板。函数只有一个声明:
FME:过程模板( )
此函数的唯一参数是模板名,或模板名称列表。如果提供了多个名称,将按照列出的顺序对模板进行评估。
例子:
以下函数调用将执行所有者模板。
FME:过程模板(“业主”)。
以下函数调用将执行所有者和地址模板。
FME:过程模板(“所有者”,“地址”)
几何数据函数
FME提供了许多使用XQuery访问几何数据的函数。所有几何数据函数的前缀都是“geom”名称空间前缀。
此函数返回当前正在处理的几何图形的尺寸,作为整数值。
此函数返回当前正在处理的几何图形的名称。如果几何图形没有名称,此函数不会返回值。
此函数与fme:get属性功能。它返回当前正在处理的几何体上的特征值。它有两个声明:
GEOM:获取特性
GEOM:获取特性
如果提供了第二个参数,几何体没有给定特征的值,函数只返回第二个参数的值。第二个参数可以是任何类型的xquery值:string,数,XML节点,嵌套函数调用,等。
如果没有提供第二个参数,几何对于给定的特征没有价值,函数不会返回值。
这些函数返回点几何图形的X/Y/Z值。如果在非点几何体上执行,则不会返回值。
实例:
{
“x”:geom:get-x-coord(),
“y”:geom:get-y-coord(),
“Z”:geom:get-z-coord()。
}
这些函数返回线性几何图形起点的x/y/z值,如线,弧和路径。如果几何图形是一个点,这些函数将返回点几何图形的X/Y/Z值。这些函数不会为任何其他类型的几何图形返回值。
这些函数返回线性几何终点的x/y/z值,如线,弧和路径。如果几何图形是一个点,这些函数将返回点几何图形的X/Y/Z值。这些函数不会为任何其他类型的几何图形返回值。
此函数返回一个字符串,其中包含正在处理的几何图形中所有点的点值。对于曲线几何图形,比如椭圆和弧,将使用冲程版本中的点。此函数有三个声明:
GEOM:获取-点())
GEOM:获取点(
GEOM:获取点(
轴顺序参数是一个字符串,指示X的顺序,Y和Z坐标应该出现在字符串中。如果没有给出参数,使用顺序“XYZ”。第二个参数指示要在x之间使用的分隔符,Y点的z值,而第三个参数指示要在每个点之间使用的分隔符。默认的轴分隔符是逗号,默认的点分隔符是一个空格。
例子:
GEOM:获取点(“xy”)
GEOM:获取点(“YXZ”)
geom:获取点(“yx”,“/”“”
geom:get points(“xyz”,““,”
最后一个示例反转默认的轴和点分隔符,使用轴之间的空格和每个点之间的逗号。
此函数返回有关圆弧几何的信息。如果当前几何图形不是圆弧,函数不会返回值。函数具有以下声明:
GEOM:获取弧数据()
该函数需要传递一个字符串列表,列出要返回的数据的名称。函数将按顺序返回值,按照它们在函数调用中列出的顺序。有效名称为:
隆起 | 原发性桡骨 | 二次半径 |
起始角 | 扫掠角 | 旋转 |
中心X | 中心Y | 中心Z |
创业X | 初创公司 | 创业Z |
中X | 中老年 | 中Z |
X端 | 末端Y | Z端 |
例子:
GEOM:获取弧数据(“扫描角度”)
geom:获取弧数据(“center-x”,“中心-Y”,“中心Z”
此函数返回有关椭圆几何的数据。如果当前几何图形不是椭圆,函数不会返回值。函数具有以下声明:
GEOM:获取椭圆数据()
该函数需要传递一个字符串列表,列出要返回的数据的名称。函数将按顺序返回值,按照它们在函数调用中列出的顺序。有效名称为:
中心X | 中心Y | 中心Z |
旋转 | 原发性桡骨 | 二次半径 |
例子:
geom:获取椭圆数据(“主半径”,“二次半径”)
GEOM:获取椭圆数据(“旋转”)
此函数返回有关文本几何图形的信息。如果当前几何图形不是文本几何图形,函数不会返回值。函数具有以下声明:
GEOM:获取文本数据()
该函数需要传递一个字符串列表,列出要返回的数据的名称。函数将按顺序返回值,按照它们在函数调用中列出的顺序。有效名称为:
例子:
GEOM:获取文本数据(“旋转”)
geom:获取文本数据(“大小”,“字符串”
几何处理功能
评估模板时,XQuery函数现在可以访问几何图形。默认情况下,访问的几何图形只是与正在处理的特征关联的几何图形。然而,使用本节中描述的功能,正在处理的几何图形可能会更改。例如,如果特征的几何图形是一个集合,这个GEOM:工艺零件函数可用于对聚合的每个部分的子模板进行顺序评估。在评估这些子模板时,上面列出的几何数据函数将访问聚合的各个部分,而不是总的来说。
注意,模板可以递归调用,如果在模板的每个评估中访问不同的几何图形。这允许将嵌套的聚合几何图形处理到任意深度,只需使用GEOM:工艺零件功能。
每个功能,除了GEOM:工艺点函数,采用一个参数,该参数定义要为不同几何图形类型运行的模板。这个映射是使用一个XML元素完成的,名为“conf”,包含不同几何类型的属性。属性值包含要为该几何图形类型运行的模板的名称。如果几何体在conf元素中没有type属性,或者如果属性包含空字符串,不会评估任何模板。
例子:
如果将以下conf元素传递给函数,该功能将在所有线形几何上评估道路模板,所有点几何图形上的POI模板,以及所有多边形几何体上的包裹模板。
以下值是conf元素的有效几何类型名称:
骨料 | 箱 | 布雷斯特格 |
复合固体 | 复合表面 | CSG-固 |
甜甜圈 | 椭圆 | 挤出 |
面对 | 线 | 网格 |
多区域 | 多曲线 | 多点 |
多固体 | 多曲面 | 多文本 |
无效的 | 路径 | 指向 |
点云 | 多边形 | 光栅 |
矩形面 | 文本 | 三角扇 |
三角条 |
除了上述类型名之外,在conf元素中可以使用许多属性来命名要为一组相关几何图形类型运行的模板。
配置属性名称 | 效果 |
---|---|
全部的 | 将为任何类型的几何图形评估命名模板。 |
地区 | 将为多边形计算命名模板,甜甜圈和椭圆几何图形。 |
曲线 | 将为第行计算命名模板,弧和路径几何。 |
收集 | 将对命名模板进行聚合和多几何体评估,比如多点,多曲线,等。 |
如果多个conf属性名适用于一个几何体,将使用更具体的属性名的值。因此,“all”的值仅在没有其他属性适用的情况下使用。
例子:
如果将以下conf元素传递给函数,函数将在所有直线和圆弧几何图形上评估路径模板,路径几何上的路径模板,以及所有其他几何图形上的另一个模板。
虽然这些conf元素命名一个模板来运行特定类型的几何图形,几何特征可用于命名要为特定对象运行的模板几何体实例.将特定几何图形上的“几何图形模板”特征设置为模板名称将使函数为该几何图形运行该模板,而不是conf元素中命名的模板。
此函数将评估子模板,基于当前正在处理的几何图形的类型。这允许为每种几何图形类型运行不同的子模板。此函数具有以下声明:
GEOM:工艺几何(
如上所述,conf元素参数,或几何图形模板特征将指示为每种几何类型运行的模板。
例子:
GEOM:工艺几何(
如果当前正在处理的几何图形是一个集合(聚合几何图形或多几何图形),此函数将为集合的每个部分评估子模板。各个几何图形将按它们在集合中显示的顺序进行处理,根据几何图形的类型选择子模板。此函数可用于递归计算模板,例如,如果聚合几何图形包含另一个聚合几何图形。与本节中的其他功能一样,此函数将conf元素作为参数,它指示为不同的几何图形类型运行哪些模板。
此函数还可用于评估几何图形部分的子模板,这些部分通常不被视为集合。例如,如果正在处理的几何图形是路径,此函数可用于评估路径每个段上的子模板。同样地,如果当前几何图形是甜甜圈,此函数可用于计算甜甜圈每个内边界上的子模板。
如果正在处理的几何图形不是集合,则此函数不返回任何内容,路径或圆环几何图形。
例子:
GEOM:工艺零件(
此函数对构成当前正在处理的几何图形的所有点评估子模板。例如,如果当前几何图形是一条线,函数将对行中每个顶点的子模板进行计算。如果当前几何图形是多边形,函数将在多边形边界的每个顶点上计算子模板。弧和椭圆会被划过,并对所选直线或多边形中的每个点进行子模板的计算。此函数有一个声明;与本节中的其他函数不同,它不接受conf元素,但采用单个字符串参数。
GEOM:工艺点(
例子:
GEOM:过程点(“航路点”)。
GEOM:工艺边界
如果正在处理的几何图形是一个区域,此函数可用于评估区域边界上的子模板。此函数仅适用于多边形,甜甜圈和椭圆几何图形。它有以下声明。
GEOM:工艺边界(
因为一个区域的边界总是一条线,弧或路径,这些是函数使用的唯一conf属性,以及更通用的“curve”和“all”属性。这个GEOM:工艺零件函数可用于为甜甜圈的每个内边界计算子模板。
已发布参数
这个新工厂可以检索工作区(或映射文件)中任何已发布参数(或宏)的值。这些值是查询中的全局变量,可以使用“fme”前缀和参数/宏名称访问。访问福美思宏观价值,这个$FME: FMEHOHE可以使用变量。由于XQuery语言的限制,名称以数字开头的参数/宏不能以这种方式访问。