XQuery函数
特性数据功能
FME提供了多种功能,可在XQuery脚本中使用。这些函数允许XQuery脚本和模板访问和操作要素属性值。所有功能功能都以前缀为前缀FME.名称空间前缀。
此函数从当前功能中检索属性的值。它有两个声明:
fme:get-attribute(<属性名称>)
FME:Get-Attribute(<属性名称>,<默认值>)
如果提供了第二个参数,而该特性没有给定属性名的值,则函数将简单地返回第二个参数的值。第二个参数可以是任何类型的XQuery值:字符串、数字、XML节点、嵌套函数调用等。
如果未提供第二个参数,并且该功能对给定属性没有值,则该功能将简单地返回空序列。
这个函数返回的字符串值将在使用它们的上下文中被转换为可序列化的。特别是,如果将值插入到XML文档中,则任何XML语法都将被转义。例如,<字符将成为& lt;和>将成为比;.这fme:get-xml属性功能可用于返回XML节点。同样,如果将该值插入JSON文档,则该值将被括在引号中,并且保留的字符将被转义。这FME:get-json-属性可用于返回JSON对象或数组。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
oranjestad. |
位置 |
<上> -70.037 - 12.519 > < /点 |
get-attribute函数返回以下结果:
XQuery. | 结果 |
---|---|
奥兰杰士塔< /名称> <名称> |
|
<类型> {fme: get-attribute(“point_type”、“城市”)}> < /类型 |
<类型>城市类型> |
{ “位置”:FME:Get-Attribute(“位置”) } |
{ “位置”:“ } |
此函数从当前功能中检索列表属性的内容。它还有两种声明:
fme:get-list-attribute(<属性名称>)
get-list-attribute(<属性名>,<分隔符>)
如果没有提供分隔符参数,则该函数将作为单个项目的序列返回列表属性。如果提供了分隔符参数,则使用分隔符参数作为分隔符的值将列表属性的内容序列化为单个字符串。
和我们一样fme: get-attribute函数,该函数返回的所有字符串值将被转换为有效的XML或JSON字符串,这取决于函数调用的上下文。这fme:get-xml列表属性函数可用于检索XML节点列表,而fme: get-json-list-attribute函数可用于检索JSON对象或数组列表。
例子:
考虑具有以下属性的功能:
属性 |
价值 |
---|---|
日期{0} |
21-08-2010 |
日期{1} |
22-08-2010 |
日期{2} |
23-08-2010 |
fme:get-list-属性函数返回以下结果:
XQuery. | 结果 |
---|---|
<日期> |
<日期> |
<日期> {fme:get-list-attribute(“日期”,“,”)} |
<日期> |
{ “日期”:fme:get-list-attribute(“日期”) } |
{ “日期”:“21-08-2010”,“22-08-2010”,“23-08-2010”) } |
这个函数检索包含XML节点的属性。它只有一个声明:
get-xml-attribute(<属性名>)
如果给定的属性包含XML文本,则此函数将解析文本并返回XML节点。如果属性不包含XML文本,则该函数将返回一个空序列。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
oranjestad. |
位置 |
<上> -70.037 - 12.519 > < /点 |
函数fme:get-xml-attribute返回以下结果:
XQuery. | 结果 |
---|---|
FME:Get-XML-Attribute(“位置”) |
<上> -70.037 - 12.519 > < /点 |
FME:Get-XML-Attribute(“名称”) |
此函数类似于FME:get-xml-属性函数,但检索列表属性。它有两个声明:
get-xml-list-attribute(<属性名>)
fme:get-xml-list-attribute(<属性名称>,
该函数尝试将列表属性中的每个值解析为XML节点。不会跳过无效XML的值。如果提供了分隔符参数,则将在每个解析的XML值之间复制到返回序列中。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
人{0} |
<人> |
人{1} |
<人> |
人{2} |
<人> |
函数fme:get-xml-list-attribute的用法如下所示:
XQuery. | 结果 |
---|---|
<人> |
<人> <人> <人> <人> > < /人 |
此函数检索包含JSON对象或数组的属性。它只有一个声明:
get-json-attribute(<属性名>)
如果给定的属性包含JSON值,则此函数将解析文本并返回JSON对象或数组。如果属性不包含JSON文本,则该函数将返回一个空序列。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
名称 |
oranjestad. |
位置 |
{ “类型”:“点”, “x”:-70.037, “y”:12.519 } |
这FME:get-json-属性函数返回以下结果:
XQuery. | 结果 |
---|---|
{"location": fme:get-json-attribute("location")} |
{ “位置”: { “类型”:“点”, “x”:-70.037, “y”:12.519 } } |
FME:Get-Json-attribute(“名称”) |
这个函数类似于fme:get-json-attribute函数,但是检索列表属性。它只有一个声明:
get-json-list-attribute(<属性名>)
该函数尝试将列表属性中的每个值解析为JSON对象或数组。跳过无效JSON的值。
例子:
考虑具有以下属性的功能:
属性 | 价值 |
---|---|
人{0} |
{ “姓名”:“John Doe”, “年龄”:25 } |
人{1} |
{ “姓名”:“胡安·多明戈”, “年龄”:27 } |
人{2} | { “姓名”:“约翰德纳”, “年龄”:29 } |
这FME:get-json-属性可以使用功能如下所示:
XQuery. | 结果 |
---|---|
{ “人”:FME:Get-Json-list-attribute(“人{}”) } |
{ “人们” : [ { “姓名”:“John Doe”, “年龄”:25 }, { “姓名”:“胡安·多明戈”, “年龄”:27 }, { “姓名”:“约翰德纳”, “年龄”:29 } ] } |
此函数允许访问要素的坐标系。如果功能具有坐标系,则该函数将返回坐标系的名称。如果该功能没有坐标系,则不会返回任何值。
这个函数非常简单。它返回一个布尔值(true/false),指示当前特性上是否存在某个属性。它有一个宣言:
FME:hase-attribute(<属性名称>)
例子:
考虑一个只有一个属性的功能:'name'。这fme:包含属性函数返回以下结果:
XQuery. | 结果 |
---|---|
fme:包含属性(“名称“) |
真的 |
fme:包含属性(“ID“) |
错误的 |
此函数返回一个布尔(真/假)值,指示作为参数的所有属性是否存在于当前功能。它有一个宣言:
fme:has-all-属性(<属性名称>)
例子:
考虑具有“名称”和“ID”属性的功能。这FME:具有 - 全部属性函数返回以下结果:
XQuery. | 结果 |
---|---|
FME:具有 - 全部属性(“名称”) |
真的 |
Fme:has-all-attributes("name", "id") |
真的 |
FME:具有 - 全部属性(“overattr”) |
错误的 |
FME:具有 - 全部属性(“名称”,“其他”,“ID”) |
错误的 |
这个函数返回一个布尔值(true/false),指示当前特性上是否存在作为参数列出的任何属性。它有一个宣言:
Fme:has-any-attributes(
例子:
考虑具有“名称”和“ID”属性的功能。这fme: has-any-attributes函数返回以下结果:
XQuery. | 结果 |
---|---|
FME:具有任何属性(“名称”) |
真的 |
Fme:has-any-attributes("name", "id") |
真的 |
FME:有任何属性(“overattr”) |
错误的 |
FME:具有任何属性(“名称”,“其他”,“ID”) |
真的 |
此函数设置要素属性的值。它有两个声明:
Fme:set-attribute(
FME:Set-Attribute(<属性名称>,<值序列>,
该特征属性将设置为值序列的序列化值。如果序列包含多个值,则该值将被连接到分隔的字符串中,并且该属性将设置为此连接值。默认分隔符是逗号,但是第三个参数可用于提供不同的分隔符。
此函数不会返回值。
例子
以下XML文档是本节示例的上下文项。
<国家>
<区> 583.776 > < /区域
<城市>
<市>普利茅斯城市>
< >城市布拉德> < /城市
城市>
> < /国家
运行以下查询后:
FME:Set-Attribute(“name_xml”,/ country / name),
Fme:set-attribute("area", /country/area/text()),
FME:Set-Attribute(“City_List”,/国家/地区/城市/文本()),
FME:Set-Attribute(“City_List2”,/国家/地区/城市/文本(),“|”)
该特性具有以下属性:
属性 | 价值 |
---|---|
name_xml |
|
区域 |
583.776. |
City_List. |
普利茅斯。布莱德 |
City_List2. |
普利茅斯|布雷斯 |
这个函数和FME:Append-Attribute函数,但它追加到特征属性的值,而不是替换属性值。它有两个声明:
FME:Append-attribute(<属性名称>,<值序列>)
FME:Append-Attribute(<属性名称>,<值序列>,
值的序列化值将附加到特征属性。如果序列包含多个值,则在附加到属性之前,值将被连接到分隔的字符串中。默认分隔符是逗号,但是第三个参数可用于提供不同的分隔符。
此函数不会返回值。
这个函数设置一个特性列表属性的值。它只有一个声明:
Fme:set-list-attribute(<属性名>,<值序列>)
该函数将序列中的每个值序列化为list属性中的一个元素。
此函数不会返回值。
例子:
以下XML文档是本节示例的上下文项。
<国家>
<国家>
<名称>蒙特塞拉特< /名称>
<资本>普利茅斯资本> < /
> < /国家
<国家>
<资本>结算 capital>
> < /国家
<国家>
奥兰杰士塔< /资本资本> < >
> < /国家
> < /国家
运行以下查询后:
Fme:set-list-attribute("names", /countries/country/name/text()),
FME:Set-List-Attribute(“首都”,/国家/国家/资本)
该特性具有以下属性:
属性 | 价值 |
---|---|
名称{0} |
蒙特塞拉特 |
名称{1} |
圣诞岛 |
名称{2} |
阿鲁巴 |
首都{0} |
<资本>普利茅斯资本> < / |
首都{1} |
<资本>结算 capital> |
首都{2} |
<资本> Orangestad资本> < / |
这个函数和fme:set-list-属性函数,但它附加到列表属性,而不是覆盖现有值。它只有一个声明:
Fme:append-list-attribute(<属性名>,<序列值>)
该函数将序列中的每个值序列化为list属性中的一个元素。现有的列表值将被保留,新值将被附加到列表的末尾。
此函数不会返回值。
功能处理功能
使用XMLTemplater和jsontemplater.,模板可以包括处理子模板的结果。有两个函数允许处理子模板。
此函数将在通过相应的输入端口输入输入变压器的功能上的模板或模板集。该函数将返回所处理的子模板的值。此函数有两个声明:
Fme:process-features(<模板名>)
FME:进程 - 功能(<模板名称>,<属性到过滤器>,<过滤器值>)
在这两种情况下,第一个参数是一个模板名称,或模板名称列表。如果没有给出额外的参数,该函数将对所有通过输入端口进入变压器的特性执行列出的模板,这些输入端口对应于这些模板。这些特性将按照它们到达变压器的顺序进行处理。
第二个和第三参数可用于过滤要处理的特征。第二个参数应包含属性名称或属性名称列表。第三个参数应包含属性值或值列表。这些参数应始终具有列出相同数量的项目。调用该函数时,它只会在与以下条件匹配的那些功能上执行列出的子模板:
- FME:流程 - 功能(“House”)
下面的函数调用将在通过HOUSE输入端口进入转换器的所有特性上执行HOUSE子模板,并在通过BUSINESS输入端口进入的所有特性上执行BUSINESS子模板。这些特性将按照它们到达变压器的顺序进行处理。
FME:流程 - 功能((“房屋”,“商业”))
下面的函数调用将对通过HOUSE输入端口进入转换器的所有特性执行HOUSE子模板num_floors属性等于3。
FME:进程 - 功能(“House”,“Num_floors”,3)
以下函数调用将在通过房屋输入端口输入变压器的所有功能上执行房屋子模板,谁的村庄属性等于ID当前正在处理的功能的属性。
fme:process-features(“HOUSE”,“village_id”,“get-attribute(“id”))
以下函数调用将在通过房屋输入端口输入变压器的所有功能上执行房屋子模板,谁的num_floors属性等于3,谁村庄属性等于ID当前正在处理的功能的属性。
FME:进程 - 功能(“House”,(“Num_floors”,“Village_ID”),(3,FME:Get-Atrigute(“ID”)))
这个函数将计算一个或一组模板。不像fme:工艺特点函数,它将在与包含函数调用的模板相同的特性上求值模板。该函数只有一个声明:
FME:进程模板(<模板名称>)
这个函数的唯一参数是一个模板名,或者一个模板名列表。如果提供了多个名称,则将按照列出的顺序对模板进行计算。
例子:
下面的函数调用将执行OWNER模板。
fme:流程模板(“业主”)
以下函数调用将执行所有者和地址模板。
FME:流程模板((“所有者”,“地址”))
几何数据功能
FME提供了许多使用XQuery访问几何数据的函数。所有几何数据函数都以“geom”名称空间前缀作为前缀。
这个函数以整数值的形式返回当前正在处理的几何图形的尺寸。
这个函数返回当前正在处理的几何图形的名称。如果几何图形没有名称,这个函数将不返回值。
这个函数几乎与之相同fme: get-attribute功能。它返回a的值特征在目前正在处理的几何图形上。它有两个声明:
GEOM:Get-Trait(
get-trait(
如果提供了第二个参数,并且几何形状没有给定特征的值,则该函数将只是返回第二参数的值。第二个参数可以是任何类型的XQuery值:字符串、数字、XML节点、嵌套函数调用等。
如果没有提供第二个参数,并且几何图形没有给定trait的值,该函数将不返回值。
这些函数返回点几何的x/y/z值。如果在非点几何上执行,则不会返回值。
例子:
{
“x”:geom:get-x-coord(),
“y”:geom:get-y-coord(),
“z”:几何学:get-z-coord ()
}
< x = "几何学:get-x-coord () " y =“几何学:get-y-coord()“z =“几何学:get-z-coord ()/>
这些函数返回线性几何的起点的x/y/z值,例如线、弧和路径。如果几何图形是一个点,这些函数将返回点几何图形的x/y/z值。这些函数不会返回任何其他类型的几何图形的值。
这些函数返回线性几何终点的X / Y / Z值,例如线,弧和路径。如果几何图形是一个点,这些函数将返回点几何图形的x/y/z值。这些函数不会返回任何其他类型的几何图形的值。
此函数返回一个字符串,其中包含正在处理的几何中所有点的点值。对于弯曲的几何形状,例如椭圆和弧形,将使用划线版本中的点。此功能有三个声明:
geom:get-points()
geom:get-points(<轴order>)
geom:get-points(<轴order>,
轴的顺序参数是一个字符串,指示x、y和z坐标应该出现在字符串中的顺序。如果没有给出该参数,则使用顺序“xyz”。第二个参数表示在点的x、y和z值之间使用的分隔符,而第三个参数表示在每个点之间使用的分隔符。默认轴分隔符是逗号,默认点分隔符是空格。
例子:
Geom:get-points(“xy”)
几何学:点(“yxz”)
Geom:get-points("yx", "/", ")
geom:get-points(“xyz”,“,”,“,”)
最后一个示例反转了默认的轴和点分隔符,在轴之间使用空格,在每个点之间使用逗号。
此函数返回有关弧形几何形状的信息。如果当前几何形状不是弧形,则该函数不会返回值。该函数具有以下声明:
geom:get-arc-data()
函数期望传递一个字符串列表来命名它要返回的数据。该函数将以序列的形式返回值,其顺序与函数调用中列出的值相同。有效的名称是:
凸 | 主要半径 | 二级半径 |
start-angle | 扫角 | 回转 |
center-x | center-y | center-z |
来启动x | start-y | start-z |
mid-x | mid-y | mid-z |
end-x | end-y | end-z |
例子:
几何学:get-arc-data(“扫描角”)
Geom:Get-Arc-Data(“Center-X”,“Center-Y”,“Center-Z”)
此函数返回有关椭圆几何形状的数据。如果当前几何形状不是椭圆形,则该函数不会返回值。该函数具有以下声明:
get-ellipse-data()
函数期望传递一个字符串列表来命名它要返回的数据。该函数将以序列的形式返回值,其顺序与函数调用中列出的值相同。有效的名称是:
center-x | center-y | center-z |
回转 | 主要半径 | 二级半径 |
例子:
get-ellipse-data("primary-radius", "secondary-radius")
几何学:get-ellipse-data(“旋转”)
这个函数返回关于文本几何图形的信息。如果当前几何图形不是文本几何图形,则函数将不返回值。该函数具有以下声明:
geom:get-text-data()
函数期望传递一个字符串列表来命名它要返回的数据。该函数将以序列的形式返回值,其顺序与函数调用中列出的值相同。有效的名称是:
例子:
geom:get-text-data(“旋转”)
get-text-data("size", "string")
几何处理功能
在评估模板时,XQuery函数现在可以访问几何体。缺省情况下,访问的几何图形就是与正在处理的该功能相关联的几何。但是,使用本节中描述的功能,可以改变正在处理的几何图形。例如,如果特征的几何形状是聚合,则地质:流程零件函数可用于对聚合的每个部分依次计算子模板。在对这些子模板进行评估时,上面列出的几何数据函数将访问聚合的各个部分,而不是聚合的整体。
注意,如果在模板的每个评估中访问不同的几何形状,则可以递归地调用模板。这允许将嵌套聚集几何几何形状处理到任意深度,只需使用地质:流程零件功能。
每一个函数,除了Geom:过程点函数,采用一个参数,该参数定义了用于为不同的几何类型运行的模板。此映射是使用XML元素完成的,命名为“conf”,其中包含不同几何类型的属性。属性值包含要为该几何类型运行的模板的名称。如果几何形状在CONF元素中没有类型属性,或者如果属性包含空字符串,则不会评估模板。
例子:
如果以下CONF元素传递给函数,则该函数将在所有线几何形状上评估所有线几何形状的道路模板,以及所有点几何形状上的POI模板,以及所有多边形几何形状上的宗地模板。
以下值是Conf元素的有效几何类型名称:
总 | 盒子 | Brepsolid. |
composite-solid | 复合表面 | csgsolid. |
油炸圈饼 | 椭圆 | 挤压 |
脸 | 行 | 网 |
互联 | 多曲线 | 多点 |
多坚固 | 多 | 多文 |
空值 | 路径 | 点 |
pointcloud | 多边形 | 栅格 |
rectangle-face | 文本 | 三角帆 |
三角条 |
除了上面的类型名称之外,还可以在conf元素中使用许多属性来命名要为一组相关几何类型运行的模板。
配置属性名称 | 影响 |
---|---|
所有 | 将评估命名模板的任何类型的几何形状。 |
区域 | 命名的模板将评估多边形,甜甜圈和椭圆几何。 |
曲线 | 将为行,弧和路径几何形状评估命名模板。 |
收藏 | 将评估命名模板,以用于聚合和多几何,例如多点,多曲线等。 |
如果多个conf属性名适用于一个几何图形,将使用更具体的属性名的值。因此,' all '的值只有在没有其他适用的属性时才会被使用。
例子:
如果以下CONF元素传递给函数,则该函数将在所有线路和弧形几何形状上评估路径模板,路径几何形状上的路径模板以及所有其他几何形状上的其他模板。
虽然这些conf元素名称为运行特定类型的几何形状的模板,几何特质可以用来命名要为特定运行的模板几何实例.将特定几何图形的' geometry_template '特征设置为一个模板名,将使函数针对该几何图形运行该模板,而不是使用conf元素中的模板名。
此函数将根据当前正在处理的几何图形的类型评估子模板。这允许为每个几何类型运行不同的子模板。此函数具有以下声明:
几何学:process-geometry (< conf / >)
如前所述,conf元素参数,或geometry_template.Trait将为每个几何类型指示运行哪个模板。
例子:
Geom:过程 - 几何(
如果当前正在处理的几何图形是一个集合(一个聚合或多个几何图形),则此函数将计算集合的每个部分的子模板。各个几何图形将按照它们在集合中出现的顺序进行处理,并且将根据几何图形的类型选择子模板。此函数可用于递归计算模板,例如,如果一个聚合几何图形包含另一个聚合几何图形。与本节中的其他函数一样,这个函数接受一个conf元素作为参数,它指示针对不同的几何类型运行哪个模板。
该功能还可用于评估几何形状的部分上的子模板,这些模板通常不会被认为是集合。例如,如果处理的几何图形是路径,则该功能可用于评估路径的每个段上的子模板。类似地,如果当前几何形状是甜甜圈,则该功能可用于评估甜甜圈的每个内边界上的子模板。
如果正在处理的几何图形不是集合、路径或甜甜圈几何图形,则此函数不返回任何内容。
例子:
GEOM:流程零件(
这个函数对组成当前正在处理的几何图形的所有点计算一个子模板。例如,如果当前的几何图形是一条直线,该函数将对直线上的每个顶点计算一个子模板。如果当前几何体是一个多边形,该函数将在多边形边界上的每个顶点上计算一个子模板。弧线和椭圆将被描边,并且子模板将在描边线或多边形的每个点上计算。这个函数有一个声明;与本节中的其他函数不同,它不接受conf元素,而是接受单个字符串参数。
地质:处理点(<子模板名称>)
例子:
地质:过程点(“航点”)
几何学:流程边界
如果正在处理的几何图形是一个区域,则该函数可用于评估区域边界上的子模板。此功能仅适用于多边形,甜甜圈和椭圆形几何形状。它有以下声明。
Geom:process-boundary(
由于区域的边界始终是一行,弧形或路径,因此这些是函数使用的唯一Conf属性,以及更通用的“曲线”和“所有”属性。这地质:流程零件功能可用于评估甜甜圈的每个内部边界的子模板。
发表的参数
这XQueryFactory可以检索工作区(或映射文件)中的任何已发布的参数(或宏)的值。这些值是查询中的全局变量,可以使用“FME”前缀和参数/宏名称访问。例如,访问FME_HOME宏的值,$ fme:fme_home可以使用变量。由于限制XQuery语言,参数/宏,其名称以这种方式无法访问一个数字。