FME提供了几个可以在XQuery脚本中使用的函数。这些函数允许XQuery脚本和模板访问和操作特性属性值。所有特征函数的前缀都是fme名称空间前缀。
此函数从当前特性检索属性值。它有两个声明:
FME:获得属性(
FME:获得属性(
如果提供了第二个参数,并且该特性没有给定属性名的值,则该函数将简单地返回第二个参数的值。第二个参数可以是任何类型的XQuery值:字符串、数字、XML节点、嵌套函数调用等。
如果没有提供第二个参数,并且该特性对于给定的属性没有值,那么该函数将只返回一个空序列。
此函数返回的字符串值将在其使用的上下文中转换为可序列化的。特别是,如果值被插入到XML文档中,那么任何XML语法都将被转义。例如,<字符将成为<和>将成为>。的fme: get-xml-attribute函数可用于返回XML节点。类似地,如果值被插入到JSON文档中,该值将被括在引号中,保留字符将被转义。的fme: get-json-attribute可以用来返回JSON对象或数组。
考虑具有以下属性的特性:
属性 | 值 |
---|---|
的名字 |
奥拉涅斯塔德 |
位置 |
|
get-attribute函数返回以下结果:
XQuery的 | 结果 |
---|---|
|
|
|
|
{ fme:get-attribute("location") } |
{ “位置”:“
} |
此函数从当前特性检索列表属性的内容。它还有两个声明:
FME:获取列表属性(
FME:获取列表属性(
如果没有提供分隔符参数,则该函数将以单个项的序列的形式返回list属性。如果提供了分隔符参数,则该函数将使用分隔符参数的值作为分隔符,将list属性的内容序列化为单个字符串。
与fme: get-attribute根据函数调用的上下文,此函数返回的所有字符串值将被转换为有效的XML或JSON字符串。的fme: get-xml-list-attribute函数可用于检索XML节点列表,以及fme: get-json-list-attribute函数可用于检索JSON对象或数组列表。
考虑具有以下属性的特性:
属性 |
值 |
---|---|
日期{0} |
21-08-2010 |
日期{1} |
22-08-2010 |
日期{2} |
23-08-2010 |
get-list-attribute函数返回以下结果:
XQuery的 | 结果 |
---|---|
|
|
{fme:get-list-attribute("dates", ",")} |
|
{ “日期”:fme: get-list-attribute(“日期”) } |
{ “日期”:“21-08-2010”,“22-08-2010”,“23-08-2010”) } |
此函数检索包含XML节点的属性。它只有一个声明:
FME:获取XML属性(
如果给定的属性包含XML文本,这个函数将解析文本并返回一个XML节点。如果属性不包含XML文本,函数将返回一个空序列。
考虑具有以下属性的特性:
属性 | 值 |
---|---|
的名字 |
奥拉涅斯塔德 |
位置 |
|
get-xml-attribute函数返回以下结果:
XQuery的 | 结果 |
---|---|
fme: get-xml-attribute(“位置”) |
|
fme: get-xml-attribute(“名字”) |
此函数类似于fme:get-xml-attribute函数,但检索列表属性。它有两个声明:
FME:获取XML的列表属性(
FME:获取XML的列表属性(
该函数尝试将list属性中的每个值解析为一个XML节点。不是有效XML的值将被跳过。如果提供了分隔符参数,它将被复制到每个解析的XML值之间的返回序列中。
考虑具有以下属性的特性:
属性 | 值 |
---|---|
人{0} |
|
人{1} |
|
人{2} |
|
fme:get-xml-list-attribute函数可使用如下:
XQuery的 | 结果 |
---|---|
|
|
该函数检索包含JSON对象或数组的属性。它只有一个声明:
fme: get-json-attribute (
如果给定的属性包含JSON值,这个函数将解析文本并返回一个JSON对象或数组。如果属性不包含JSON文本,函数将返回一个空序列。
考虑具有以下属性的特性:
属性 | 值 |
---|---|
的名字 |
奥拉涅斯塔德 |
位置 |
{ “类型”:“点”, “x”: -70.037, “y”: 12.519 } |
的fme: get-json-attribute函数返回以下结果:
XQuery的 | 结果 |
---|---|
{“location”:fme:get-json-attribute(“location”)} |
{ “位置”: { “类型”:“点”, “x”: -70.037, “y”: 12.519 } } |
fme: get-json-attribute(“名字”) |
此函数类似于fme:get-json-attribute函数,但检索列表属性。它只有一个声明:
fme: get-json-list-attribute (
该函数尝试将list属性中的每个值解析为JSON对象或数组。不是有效JSON的值将被跳过。
考虑具有以下属性的特性:
属性 | 值 |
---|---|
人{0} |
{ "name": "John Doe", “年龄”:25 } |
人{1} |
{ “名字”:“胡安·多明戈”, “年龄”:27 } |
人{2} | { "name": "Johann Deuter", “年龄”:29 } |
的fme: get-json-attribute功能如下图所示:
XQuery的 | 结果 |
---|---|
{ “people”:fme:get-json-list-attribute(“person{}”) } |
{ “人”:“ { "name": "John Doe", “年龄”:25 }, { “名字”:“胡安·多明戈”, “年龄”:27 }, { "name": "Johann Deuter", “年龄”:29 } ] } |
这个函数允许访问特性的坐标系统。如果一个功能有一个坐标系统,函数将返回该坐标系统的名称。如果特性没有坐标系统,则不会返回任何值。
这个函数非常简单。它返回一个布尔值(true/false),指示当前特性上是否存在属性。它有一个声明:
FME:具有属性(
考虑一个只有一个属性的特性:' name '。的fme:包含属性函数返回以下结果:
XQuery的 | 结果 |
---|---|
FME:具有属性(”的名字”) |
真正的 |
FME:具有属性(”ID”) |
假 |
此函数返回一个布尔值(true/false),指示作为参数列出的所有属性是否都存在于当前特性中。它有一个声明:
FME:有 - 所有的属性(
考虑一个具有' name '和' id '属性的特性。的fme: has-all-attributes函数返回以下结果:
XQuery的 | 结果 |
---|---|
fme: has-all-attributes(“名字”) |
真正的 |
fme:拥有所有属性(“name”,“id”) |
真正的 |
fme: has-all-attributes (“otherattr”) |
假 |
fme:拥有所有属性(“name”、“other”、“id”) |
假 |
此函数返回一个布尔值(true/false),指示作为参数列出的任何属性是否存在于当前特性中。它有一个声明:
FME:有,任何的属性(
考虑一个具有' name '和' id '属性的特性。的fme: has-any-attributes函数返回以下结果:
XQuery的 | 结果 |
---|---|
fme: has-any-attributes(“名字”) |
真正的 |
fme:具有任意属性(“name”,“id”) |
真正的 |
fme: has-any-attributes (“otherattr”) |
假 |
fme:具有任意属性(“name”、“other”、“id”) |
真正的 |
此函数设置特性属性的值。它有两个声明:
FME:集属性(
FME:集属性(
feature属性将被设置为值序列的序列化值。如果序列包含一个以上的值,这些值将被连接到一个带分隔符的字符串中,并且属性将被设置为这个连接的值。默认的分隔符是逗号,但是第三个参数可以用来提供不同的分隔符。
此函数不返回值。
以下XML文档是本节示例的上下文项。
583.776
运行以下查询后:
fme:set-attribute("name_xml", /country/name),
fme:设置属性(“area”,/country/area/text()),
fme:set属性(“city_list”,/country/cities/city/text()),
fme:set属性(“city_list2”,/country/cities/city/text(),“”)
该功能具有以下属性:
属性 | 值 |
---|---|
name_xml |
|
区域 |
583.776 |
city_list |
Plymouth.Brades |
city_list2 |
普利茅斯|布拉德 |
这个函数与fme:附加属性函数,但它附加到特征属性的值,而不是替换属性值。它有两个声明:
fme:附加属性(
fme:附加属性(
值序列的序列化值将附加到feature属性。如果序列包含多个值,则在将值附加到属性之前,这些值将连接到分隔字符串中。默认的分隔符是逗号,但是第三个参数可以用来提供不同的分隔符。
此函数不返回值。
此函数用于设置要素列表属性的值。它只有一个声明:
FME:设置列表属性(
函数将序列中的每个值序列化为list属性中的元素。
此函数不返回值。
以下XML文档是本节示例的上下文项。
运行以下查询后:
fme:set list attribute(“名称”,/countries/country/name/text()),
fme:设置列表属性(“capitals”,/countries/country/capital)
该功能具有以下属性:
属性 | 值 |
---|---|
名字{0} |
蒙特塞拉特 |
名字{1} |
圣诞岛 |
名字{2} |
阿鲁巴 |
首都{0} |
|
首都{1} |
|
首都{2} |
|
这个函数与fme:设置列表属性函数,但它附加到列表属性,而不是重写现有值。它只有一个声明:
fme:追加列表属性(
函数将序列中的每个值序列化为list属性中的元素。将保留现有的列表值,将新的值附加到列表的末尾。
此函数不返回值。
使用XMLTemplater和JSONTemplater,该模板可以包含处理子模板的结果。有两个函数允许处理子模板。
此函数将对通过相应输入端口进入转换器的特征求值一个模板或一组模板。函数将返回处理的子模板的值。此函数有两个声明:
FME:过程特性( )
FME:过程特性(
,
在这两种情况下,第一个参数都是模板名称或模板名称列表。如果没有给出额外的参数,函数将对通过与这些模板相对应的输入端口进入转换器的所有特征执行列出的模板。这些特性将按照它们到达变压器的顺序进行处理。
第二和第三个参数可用于过滤要处理的特征。第二个参数应包含属性名或属性名列表。第三个参数应包含属性值或值列表。这些参数应始终列出相同数量的项。调用该函数时,它将只对符合以下条件的功能执行列出的子模板:
以下函数调用将对通过内部输入端口进入变压器的所有功能执行内部子模板,对通过业务输入端口进入的所有功能执行业务子模板。这些特性将按照它们到达变压器的顺序进行处理。
fme:流程特征((“house”,“business”))
下面的函数调用将对通过house输入端口进入transformer的所有特性执行house子模板,并且num_floors属性等于3。
FME:流程特征(“House”,“Num_Floors”,3)
下面的函数调用将对通过house输入端口进入变压器的所有特性执行house子模板,并且village_id属性等于ID当前正在处理的功能的属性。
fme:流程特征(“HOUSE”,“village_id”,fme:get attribute(“id”))
下面的函数调用将对通过house输入端口进入变压器的所有特性执行house子模板,并且num_floors属性等于3,并且village_id属性等于ID当前正在处理的功能的属性。
fme:process features(“house”,“num_floors”,“village_id”),(3,fme:get attribute(“id”))
此函数将计算一个模板或一组模板。不像FME:过程特性函数,它将在包含要对其求值的函数调用的模板的相同功能上对模板求值。函数只有一个声明:
FME:过程模板( )
此函数的唯一参数是模板名称或模板名称列表。如果提供了多个名称,则将按照列出的顺序计算模板。
以下函数调用将执行所有者模板。
FME:过程模板(“业主”)
以下函数调用将执行所有者和地址模板。
fme:流程模板((“所有者”,“地址”))
FME提供了许多使用XQuery访问几何数据的函数。所有几何数据函数都以“geom”命名空间前缀为前缀。
此函数将当前正在处理的几何图形的尺寸作为整数值返回。
此函数返回当前正在处理的几何图形的名称。如果几何体没有名称,则此函数将不返回值。
这个函数几乎与fme: get-attribute函数。它返回特征在当前正在处理的几何体上。它有两个声明:
geom:获取特征(
geom:获取特征(
如果提供了第二个参数,并且几何体没有给定特征的值,则函数将只返回第二个参数的值。第二个参数可以是任何类型的XQuery值:字符串、数字、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:get-points()
geom:获取点(
geom:获取点(
轴顺序参数是一个字符串,指示X、Y和Z坐标在字符串中应该出现的顺序。如果未给出参数,则使用“xyz”顺序。第二个参数表示要在点的x、y和z值之间使用的分隔符,而第三个参数表示要在每个点之间使用的分隔符。默认的轴分隔符是逗号,默认的点分隔符是一个空格。
geom:获取点(“xy”)
geom:获取点(“yxz”)
geom:get points(“yx”,“/”,“”)
geom:get points(“xyz”,“xyz”,“xyz”,“xyz”,“xyz”,“xyz”,“xyz”),获取点
最后一个示例使用轴之间的空间和每个点之间的逗号来反转默认轴和点分隔符。
此函数返回有关圆弧几何图形的信息。如果当前几何图形不是圆弧,则函数将不返回值。函数具有以下声明:
GEOM:获取圆弧数据()
该函数希望传递一个字符串列表,用于命名要返回的数据。函数将按函数调用中列出的顺序以序列形式返回值。有效名称为:
凸 | 主半径 | 二次半径 |
启动角 | 扫描角 | 回转 |
中心-X | 中心-Y | 中心-Z |
启动-X | start-y | start-z |
mid-x | mid-y | mid-z |
end-x | end-y | end-z |
GEOM:获取圆弧数据(“扫描角度”)
geom:获取圆弧数据(“center-x”、“center-y”、“center-z”)
此函数返回有关椭圆几何图形的数据。如果当前几何图形不是椭圆,则函数将不返回值。函数具有以下声明:
geom:获取椭圆数据()
该函数希望传递一个字符串列表,用于命名要返回的数据。函数将按函数调用中列出的顺序以序列形式返回值。有效名称为:
中心-X | 中心-Y | 中心-Z |
回转 | 主半径 | 二次半径 |
geom:获取椭圆数据(“主半径”,“次半径”)
geom:获取椭圆数据(“旋转”)
此函数返回有关文本几何图形的信息。如果当前几何图形不是文本几何图形,则函数将不返回值。函数具有以下声明:
geom:获取文本数据()
该函数希望传递一个字符串列表,用于命名要返回的数据。函数将按函数调用中列出的顺序以序列形式返回值。有效名称为:
geom:获取文本数据(“旋转”)
geom:获取文本数据(“size”,“string”)
在评估模板时,XQuery函数现在可以访问几何图形。默认情况下,被访问的几何图形只是与正在处理的特性相关联的几何图形。然而,使用本节中描述的函数,正在处理的几何图形可能会改变。例如,如果一个特性的几何图形是一个聚合体,则几何学:process-parts函数可用于对聚合的每个部分上的子模板进行顺序求值。在评估这些子模板时,上面列出的几何数据函数将访问聚合的各个部分,而不是整个聚合。
请注意,如果在模板的每次计算中访问的是不同的几何图形,则可以递归地调用模板。这允许对嵌套聚合几何图形进行任意深度的处理,只需使用几何学:process-parts函数。
每一个函数,除了几何学:工艺要点函数,接受一个参数,该参数定义为不同的几何类型运行哪个模板。这个映射是使用一个名为“conf”的XML元素完成的,它包含不同几何类型的属性。属性值包含要为该几何类型运行的模板的名称。如果几何图形在conf元素中没有type属性,或者该属性包含空字符串,则不计算任何模板。
如果将以下conf元素传递给一个函数,该函数将在所有线形图形上计算道路模板,在所有点图形上计算POI模板,在所有多边形图形上计算包裹模板。
下列值是conf元素的有效几何类型名称:
骨料 | 框 | brepsolid |
复合固体 | 复合表面 | csgsolid |
甜甜圈 | 椭圆 | 挤压 |
面对 | 线 | 啮合 |
多领域 | 多曲线 | 多点 |
多实 | 多表面 | 多文本 |
空值 | 路径 | 点 |
点云 | 多边形 | 光栅 |
长方形脸 | 文本 | 三角形扇 |
三角形条 |
除了上面的类型名之外,conf元素中还可以使用许多属性来命名要为一组相关几何类型运行的模板。
CONF属性名称 | 影响 |
---|---|
所有 | 已命名的模板适用于任何类型的几何形状进行评估。 |
区域 | 命名模板将多边形,甜甜圈和椭圆的几何形状进行评估。 |
曲线 | 已命名的模板会为直线,圆弧和路径的几何形状进行评估。 |
采集 | 已命名的模板将聚集体和多几何形状,例如多点,多曲线等来评价 |
如果一个几何图形中有多个conf属性名,则将使用更具体的属性名的值。因此,只有在没有其他属性可用时,才会使用“all”的值。
如果将下面的conf元素传递给一个函数,该函数将计算所有直线和圆弧几何图形上的路径模板、路径几何图形上的路径模板和所有其他几何图形上的其他模板。
当这些conf元素命名一个模板来运行特定类型的几何图形时,a几何特征可以用来命名要为特定对象运行的模板吗几何实例。将特定几何图形上的' geometry_template '特征设置为模板名称,将使函数为该几何图形运行该模板,而不是运行conf元素中指定的模板。
此函数将根据当前正在处理的几何图形类型计算子模板。这允许为每个几何体类型运行不同的子模板。本功能有如下声明:
的geom:处理几何(
如上所述,通过conf元件参数,或geometry_template特征将显示为每个几何类型运行的模板。
的geom:处理几何(
如果当前正在处理的几何形状是一个集合(聚集体或多几何形状),该函数将评估为集合中的每个部分的子模板。各个几何状况出现集合中的顺序进行处理,和一个子模板将基于几何的类型来选择。该功能可用于如果聚合几何包含另一个聚合几何递归评估模板,例如。正如在本节中的其它功能,该功能需要一个CONF元件作为一个参数,其指示哪个模板为不同的几何形状的类型运行。
此功能还可以用于在其上通常不认为是收藏品的几何形状的零件评估子模板。例如,如果正在处理的几何形状是一个路径,该功能可被用于评估该路径的每个分段的子模板。类似地,如果当前的几何形状是环形,该功能可以用于圆环的每一个内边界上评估的子模板。
如果正在处理的几何形状不是一个集合,路径或圆环形状,此功能不返回任何东西。
的geom:过程份(
此功能评估上弥补了目前正在处理的几何形状的所有点的子模板。例如,如果当前的几何形状是一条线,该功能将评估在线路的每个顶点的子模板。如果当前的几何形状是多边形,该功能将评估在多边形边界每个顶点子模板。弧和椭圆将被抚摸,以及子模板将在所述描边线或多边形的每个点进行评估。这个函数有一个声明;不像在本节中的其它功能,它并不需要一个CONF元件,但需要一个单一的字符串参数来代替。
的geom:处理点(
的geom:处理点( “WAYPOINT”)
GEOM:过程边界
如果被处理的几何形状是一个区域,该功能可用于评估的区域的边界上的子模板。此功能仅适用于多边形,甜甜圈和椭圆形的几何形状。它具有以下声明。
的geom:过程边界(
由于一个区域的边界总是直线,圆弧或路径,这些是由函数所使用的,是与更通用的“曲线”和“所有”的属性沿唯一CONF属性。的几何学:process-parts函数可以被用于评估一个环形的每个内边界的子模板。
的XQueryFactory可以检索工作空间(或映射文件)中任何已发布的参数(或宏)的值。这些值是查询中的全局变量,可以使用“fme”前缀和参数/宏名访问它们。例如,访问FME_HOME宏的值,fme:美元:FME_HOME可以使用变量。由于XQuery语言的限制,名称以数字开头的参数/宏不能通过这种方式访问。