XQuery函数
要素数据功能
FME提供了可XQuery的脚本内使用几种功能。这些功能允许XQuery的脚本和模板访问和操作的功能属性值。所有的功能函数前面加上FME命名空间前缀。
该函数从当前特征的属性值。它有两个声明:
fme: get-attribute (
fme: get-attribute (
如果提供了第二个参数,并且该功能不具有给定的属性名称的值,该函数将只返回第二个参数的值。第二参数可以是任何类型的XQuery值:字符串,数字,XML节点,嵌套函数呼叫等
如果没有提供第二个参数,该功能对给定的属性值,则函数只会返回一个空序列。
此函数返回的字符串值将在其使用的上下文中转换为可序列化的。特别是,如果值被插入到XML文档中,那么任何XML语法都将被转义。例如,<字符将成为<和>将成为>。该fme: get-xml-attribute函数可用于返回XML节点。类似地,如果值被插入到JSON文档中,该值将被括在引号中,保留字符将被转义。该fme: get-json-attribute可以用来返回JSON对象或数组。
例:
考虑具有以下属性的特性:
属性 | 价值 |
---|---|
的名字 |
Oranjestad |
位置 |
|
get-attribute函数返回以下结果:
XQuery | 结果 |
---|---|
|
|
|
|
{ fme:get-attribute("location") } |
{ “位置”:“
} |
此函数从当前特性检索列表属性的内容。它还有两个声明:
fme: get-list-attribute (
fme: get-list-attribute (
如果没有提供分隔符参数,则该函数将以单个项的序列的形式返回list属性。如果提供了分隔符参数,则该函数将使用分隔符参数的值作为分隔符,将list属性的内容序列化为单个字符串。
与FME:GET属性根据函数调用的上下文,此函数返回的所有字符串值将被转换为有效的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: get-xml-attribute (
如果给定的属性包含XML文本,这个函数将解析文本并返回一个XML节点。如果属性不包含XML文本,函数将返回一个空序列。
例:
考虑具有以下属性的特性:
属性 | 价值 |
---|---|
的名字 |
Oranjestad |
位置 |
|
get-xml-attribute函数返回以下结果:
XQuery | 结果 |
---|---|
fme: get-xml-attribute(“位置”) |
|
fme: get-xml-attribute(“名字”) |
此函数类似于fme:get-xml-attribute函数,但检索列表属性。它有两个声明:
fme: get-xml-list-attribute (
fme: get-xml-list-attribute (
该函数尝试将list属性中的每个值解析为一个XML节点。不是有效XML的值将被跳过。如果提供了分隔符参数,它将被复制到每个解析的XML值之间的返回序列中。
例:
考虑具有以下属性的特性:
属性 | 价值 |
---|---|
人{0} |
|
人{1} |
|
人{2} |
|
fme:get-xml-list-attribute函数可使用如下:
XQuery | 结果 |
---|---|
|
|
该函数检索包含JSON对象或数组的属性。它只有一个声明:
fme: get-json-attribute (
如果给定的属性包含JSON值,这个函数将解析文本并返回一个JSON对象或数组。如果属性不包含JSON文本,函数将返回一个空序列。
例:
考虑具有以下属性的特性:
属性 | 价值 |
---|---|
的名字 |
Oranjestad |
位置 |
{ “类型”:“点”, “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: has-all-attributes (
例:
考虑一个具有' name '和' id '属性的特性。该fme: has-all-attributes函数返回以下结果:
XQuery | 结果 |
---|---|
fme:具有所有属性(“name”) |
真的 |
fme:具有所有属性(“name”,“id”) |
真的 |
fme:具有所有属性(“otherattr”) |
假 |
fme:具有所有属性(“name”、“other”、“id”) |
假 |
此函数返回一个布尔值(true/false),指示作为参数列出的任何属性是否存在于当前特性中。它有一个声明:
fme: has-any-attributes (
例:
考虑一个具有' name '和' id '属性的特性。该fme: has-any-attributes函数返回以下结果:
XQuery | 结果 |
---|---|
fme:有任何属性(“name”) |
真的 |
fme:有任何属性(“name”,“id”) |
真的 |
fme:有任何属性(“otherattr”) |
假 |
fme:有任何属性(“name”、“other”、“id”) |
真的 |
此函数设置特性属性的值。它有两个声明:
fme:设置一个属性(
fme:设置一个属性(
feature属性将被设置为值序列的序列化值。如果序列包含一个以上的值,这些值将被连接到一个带分隔符的字符串中,并且属性将被设置为这个连接的值。默认的分隔符是逗号,但是第三个参数可以用来提供不同的分隔符。
此函数不返回值。
例子
以下XML文档是本节示例的上下文项。
583.776
运行以下查询后:
fme:set-attribute("name_xml", /country/name),
fme:set-attribute("area", /country/area/text()),
fme:set-attribute("city_list", /country/cities/city/text()),
fme:set-attribute("city_list2", /country/cities/city/text(), "|")
该功能具有以下属性:
属性 | 价值 |
---|---|
名称xml |
|
区域 |
583.776 |
城市清单 |
普利茅斯.布雷兹 |
城市清单2 |
普利茅斯|布雷德斯 |
这个函数与fme: append-attribute函数,但它附加到特性属性的值,而不是替换属性值。它有两个声明:
fme: append-attribute (
fme: append-attribute (
值序列的序列化值将附加到feature属性。如果序列包含一个以上的值,这些值将在被附加到属性之前被连接到一个带分隔符的字符串中。默认的分隔符是逗号,但是第三个参数可以用来提供不同的分隔符。
此函数不返回值。
此函数设置特性列表属性的值。它只有一个声明:
fme: set-list-attribute (
该函数将序列中的每个值序列化为list属性中的一个元素。
此函数不返回值。
例:
以下XML文档是本节示例的上下文项。
运行以下查询后:
fme:set-list-attribute("names", /countries/country/name/text()),
fme:set-list-attribute("capitals", /countries/country/capital)
该功能具有以下属性:
属性 | 价值 |
---|---|
名称{0} |
蒙特塞拉特 |
名字{1} |
圣诞岛 |
名字{2} |
阿鲁巴岛 |
大写{0} |
|
大写{1} |
|
大写{2} |
|
这个函数与fme: set-list-attribute函数,但它附加到list属性,而不是覆盖现有值。它只有一个声明:
fme: append-list-attribute (
该函数将序列中的每个值序列化为list属性中的一个元素。现有的列表值将被保留,新值将追加到列表的末尾。
此函数不返回值。
特征点处理功能
使用XMLTemplater和JSONTemplater中,模板可以包括处理子模板的结果。有两个功能,让子模板来进行处理。
这个函数将评估一个模板,或一组模板,通过相应的输入端口输入转换器的特性。该函数将返回所处理的子模板的值。这个函数有两个声明:
fme:工艺特点( )
fme:工艺特点(
,
在这两种情况下,第一个参数都是模板名或模板名列表。如果没有给出额外的参数,该函数将对通过与这些模板对应的输入端口输入转换器的所有特性执行列出的模板。这些特征将按照它们到达变压器的顺序进行处理。
第二个和第三个参数可以用来过滤要处理的特征。第二个参数应该包含一个属性名,或者一个属性名列表。第三个参数应该包含一个属性值,或者一个值列表。这些参数应该总是列出相同数量的项。当该函数被调用时,它将只对那些符合以下条件的特性执行列出的子模板:
- fme:工艺特点(“房子”)
下面的函数调用将对通过HOUSE输入端口输入的所有功能执行HOUSE子模板,对通过BUSINESS input端口输入的所有功能执行BUSINESS子模板。这些特征将按照它们到达转换器的顺序进行处理。
fme:流程特性(“HOUSE”、“BUSINESS”)
下面的函数调用将对通过HOUSE输入端口输入转换器的所有特性执行HOUSE子模板,以及谁的特性num_floors属性等于3。
fme:流程特性(“HOUSE”,“num_floors”,3)
下面的函数调用将对通过HOUSE输入端口输入转换器的所有特性执行HOUSE子模板village_id属性等于id当前正在处理的特性的属性。
进程-功能("HOUSE", "village_id", fme:get-attribute("id"))
下面的函数调用将对通过HOUSE输入端口输入转换器的所有特性执行HOUSE子模板num_floors属性值为3,其值为village_id属性等于id当前正在处理的特性的属性。
fme:进程特性(" HOUSE", (" num_floors", "village_id"), (3, fme:get-attribute("id")))
这个函数将计算一个或一组模板。不像fme:工艺特点功能,它会评估对相同的特征为包含函数调用上被评估的模板的模板。该函数只有一个声明:
FME:流程模板( )
唯一的参数,这个功能是一个模板名称,或模板名称的列表。如果提供多个名称,模板将在他们列出的顺序进行评估。
例:
下面的函数调用将执行业主模板。
FME:流程的模板(“所有者”)
下面的函数调用将执行业主和地址模板。
FME:流程的模板(( “所有者”, “地址”))
几何数据函数
FME提供了许多功能,用于访问使用XQuery几何数据。所有的几何数据功能的前缀与“GEOM”命名空间前缀。
该函数返回当前正在处理的几何形状的尺寸,作为一个整数值。
该函数返回当前正在处理的几何体的名称。如果几何没有一个名字,这个函数将不会返回值。
此函数是几乎相同的FME:GET属性功能。它返回对当前正在处理的几何特征的价值。它有两个声明:
GEOM:GET性状(
GEOM:GET性状(
如果提供了第二个参数和几何不具有给定性状的值,该函数将只返回第二个参数的值。第二参数可以是任何类型的XQuery值:字符串,数字,XML节点,嵌套函数呼叫等
如果没有提供第二个参数,以及几何形状对于给定的特征值,则函数不会返回一个值。
这些函数返回一个点几何结构的X / Y / Z的值。如果他们在非点几何执行他们不会返回值。
例子:
{
“X”:GEOM:GET-X-坐标()
“Y”:GEOM:GET-Y-坐标()
“Z”:GEOM:GET-Z-坐标()
}
这些函数返回的x / y /线性几何形状,例如直线,圆弧和路径的开始点的z值。如果几何形状是点,这些函数将返回点几何结构的X / Y / Z的值。这些功能不会为任何其他类型的几何形状的返回值。
这些函数返回的x / y /线性几何形状,例如直线,圆弧和路径的结束点的z值。如果几何形状是点,这些函数将返回点几何结构的X / Y / Z的值。这些功能不会为任何其他类型的几何形状的返回值。
该函数返回正在处理含在几何所有点的点值的字符串。对于弯曲的几何形状,如椭圆和圆弧,在抚摸版本的点将被使用。此功能有三个声明:
GEOM:GET点()
GEOM:GET点(
GEOM:GET点(
轴顺序参数是一个字符串,表示其订购的x,y和z坐标应出现在的字符串中。如果该参数没有给出,则令“XYZ”一词。第二个参数指示分隔符,其是在一个点的X,Y,和z值之间使用,而第三个参数表示定界符作为每个点之间使用。默认轴分隔符为逗号,默认点分隔符是一个空间。
例:
GEOM:获取点( “XY”)
GEOM:获取点( “YXZ”)
GEOM:获取点( “YX”, “/”, “”)
GEOM:获取点( “XYZ”, “”, “”)
最后一个例子颠倒默认轴线和点分离器,使用所述轴和每个点之间的逗号之间的空间。
这个函数返回关于弧几何信息。如果当前的几何形状不是圆弧,该函数将不会返回值。该功能具有以下声明:
GEOM:GET弧数据()
该函数需要传递的字符串命名,它是返回数据的列表。该函数将返回值作为一个序列中,它们在函数调用中列出的顺序。有效的名称是:
胀 | primary-radius | secondary-radius |
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 |
例:
GEOM:GET弧的数据(“扫角”)
GEOM:GET弧的数据( “中心X”, “中心Y”, “中心-Z”)
该函数返回椭圆几何数据。如果当前的几何形状不是椭圆,该函数将不会返回值。该功能具有以下声明:
GEOM:GET-椭圆数据()
该函数需要传递的字符串命名,它是返回数据的列表。该函数将返回值作为一个序列中,它们在函数调用中列出的顺序。有效的名称是:
center-x | center-y | center-z |
旋转 | primary-radius | secondary-radius |
例:
的geom:GET-椭圆数据( “主半径”, “次级半径”)
GEOM:获取椭圆的数据(“旋转”)
这个函数返回有关文本的几何形状的信息。如果当前的几何形状不是文本几何,函数不会返回值。该功能具有以下声明:
GEOM:获取文本数据()
该函数需要传递的字符串命名,它是返回数据的列表。该函数将返回值作为一个序列中,它们在函数调用中列出的顺序。有效的名称是:
例:
几何学:get-text-data(“旋转”)
geom:get-text-data("size", "string")
几何处理功能
当评估一个模板,XQuery函数现在可以使用的几何形状。默认情况下,该被访问的几何结构仅仅是与正在被处理的特征相关联的几何形状。然而,使用本节中所描述的功能,这是正在处理的几何形状可被改变。例如,如果一个要素的几何是一个聚合时,的geom:过程份功能可以被用来顺序地评价对聚集体的各部分的子模板。而目前正在评估这些子模板,上面列出的几何数据的功能将访问集合体的各个部分,而不是聚集体作为一个整体。
请注意,它是可能的递归调用模板,如果不同的几何形状在模板中的每一个评价访问。这允许嵌套骨料几何形状以任意深度,加工简单地通过使用的geom:过程份功能。
这些函数,除了GEOM:工艺点功能,需要其限定模板为不同的几何形状的类型运行的参数。这个映射是使用XML元素,命名为“CONF”,其包含用于不同的几何形状类型的属性来完成。属性值包含这对于几何类型要运行的模板的名称。如果几何没有在conf元素的类型属性,或者属性包含一个空字符串,没有模板进行评估。
例:
如果下面的conf元素传递给函数,该函数将评估所有多边形的几何形状上的所有线路几何形状ROAD模板,对所有点的几何形状的POI模板,包裹模板。
下面的值是通过conf元素有效的几何类型名称:
总 | 盒子 | brepsolid |
composite-solid | 合成曲面 | csgsolid |
甜甜圈 | 椭圆 | 挤压 |
脸 | 行 | 网 |
互联 | multi-curve | 多点 |
multi-solid | 多 | multi-text |
零 | 路径 | 点 |
pointcloud | 多边形 | 光栅 |
rectangle-face | 文本 | 三角形扇形 |
三角形带 |
除了上述类型的名字,也有一些属性可在conf元件用来命名模板以用于一组相关的几何类型的运行。
配置属性名称 | 效果 |
---|---|
所有 | 对于任何类型的几何图形,将对命名模板进行评估。 |
区域 | 命名模板将评估多边形,甜甜圈和椭圆几何形状。 |
曲线 | 将对命名模板的直线、圆弧和路径几何图形进行评估。 |
集合 | 将对命名模板的聚合和多几何图形(如多点、多曲线等)进行评估。 |
如果有一个以上的conf属性名称是适用于几何形状,将使用更具体的属性名称的值。因此,“所有”只会如果没有其他属性适用使用的价值。
例:
如果下面的conf元素传递给函数,该函数将评估所有的直线和圆弧的几何形状的路径模板,在路径几何形状的路径模板,以及所有其他几何形状的其他的模板。
虽然这些元素CONF命名模板运行特定类型的几何形状,几何特性可以被用来命名模板,其是用于特定要运行例如几何。设置“geometry_template”特征在一个特定的几何模板名称将使得功能运行模板为几何,而不是在conf元素命名的模板。
这个函数将根据当前处理的几何图形的类型评估子模板。这允许为每个几何类型运行不同的子模板。该函数有如下声明:
几何学:process-geometry (
如前所述,conf元素参数,或geometry_templatetrait将指示为每个几何类型运行哪个模板。
例:
几何学:process-geometry (
如果当前处理的几何图形是一个集合(一个聚合或多个几何图形),这个函数将为集合的每个部分计算子模板。各个几何图形将按照它们在集合中出现的顺序进行处理,并根据几何图形的类型选择子模板。此函数可用于递归地计算模板,例如,如果聚合几何图形包含另一个聚合几何图形。与本节中的其他函数一样,此函数以conf元素作为参数,该参数指示为不同的几何类型运行哪些模板。
此函数还可用于评估几何图形中通常不被视为集合的部分的子模板。例如,如果正在处理的几何图形是路径,则可以使用此函数对路径的每个段上的子模板求值。类似地,如果当前的几何图形是一个甜甜圈,这个函数可以用来计算甜甜圈内部边界上的子模板。
如果正在处理的几何图形不是集合、路径或甜甜圈几何图形,则此函数不返回任何内容。
例:
几何学:process-parts (
这个函数在组成当前处理的几何图形的所有点上计算子模板。例如,如果当前的几何图形是一条直线,那么函数将对直线上每个顶点的子模板求值。如果当前的几何图形是多边形,则该函数将在多边形边界上的每个顶点上对子模板求值。弧和椭圆将被描边,子模板将在描边线或多边形的每个点上求值。这个函数有一个声明;与本节中的其他函数不同,它不接受conf元素,而是接受单个字符串参数。
几何学:工艺要点(
例:
几何学:工艺要点(“路标”)
几何学:流程边界
如果正在处理的几何图形是一个区域,则可以使用此函数对区域边界上的子模板求值。此函数只适用于多边形,甜甜圈和椭圆几何。它有以下声明。
几何学:流程边界(
因为一个区域的边界总是一条线、一条弧或一条路径,所以这些是该函数使用的唯一conf属性,以及更通用的“curve”和“all”属性。该的geom:过程份函数可用于计算甜甜圈每个内部边界的子模板。
公布的参数
该XQueryFactory可以在工作空间中(或映射文件)检索任何公布的参数(或宏)的值。这些值在查询全局变量,并且可以使用“FME”前缀和参数/宏名来访问。例如,访问FME_HOME宏值时,$ FME:FME_HOME变量可以被使用。由于XQuery语言,参数/宏的名字开始与一些不以这种方式进入的限制。