Fonctions XQuery

Fonctions de données d'entités

Fonctions de traitement d'entités

Fonctions données géométriques

Fonctions de traitement de la géométrie

Paramètres publiés

Fonctions de données d'entités

FME fournit des fonctions qui peuvent être utilisées dans les scripts XQuery. Ces fonctions permettent aux scripts et aux modèles XQuery d'accéder aux valeurs des attributs des entités et de les manipuler.

Toutes les fonctions d'entités sont préfixées par fme(espace de nommage).

Fonctions de traitement d'entités

En utilisant XMLTemplater et JSONTemplater, le modèle peut inclure les résultats générés par des sous-modèles. Il existe deux fonctions qui permettent de traiter les sous-modèles.

Fonctions données géométriques

FME fournit un certain nombre de fonctions permettant d'accéder aux données géométriques à l'aide de XQuery. Toutes les fonctions de données géométriques sont précédées du préfixe d'espace de nom "geom".

Fonctions de traitement de la géométrie

Lors de l'évaluation d'un modèle, les fonctions XQuery ont désormais accès à la géométrie. Par défaut, la géométrie à laquelle on accède est simplement la géométrie associée à l'entité en cours de traitement. Toutefois, à l'aide des fonctions décrites dans cette section, il est possible de modifier la géométrie en cours de traitement. Par exemple, si la géométrie d'une entité est un agrégat, la fonction geom:process-parts peut être utilisée pour évaluer séquentiellement un sous-modèle sur chaque partie de l'agrégat. Pendant que ces sous-modèles sont évalués, les fonctions de données géométriques énumérées ci-dessus accèdent aux parties individuelles de l'agrégat, plutôt qu'à l'agrégat dans son ensemble.

Notez qu'il est possible qu'un modèle soit appelé de manière récursive, si une géométrie différente est accédée à chaque évaluation du modèle. Cela permet de traiter des géométries agrégées imbriquées à des profondeurs arbitraires, en utilisant simplement la fonction geom:process-parts.

Chacune de ces fonctions, à l'exception de la fonction geom:process-points, prend un paramètre qui définit le modèle à exécuter pour les différents types de géométrie. Ce mappage est effectué à l'aide d'un élément XML, appelé "conf", qui contient des attributs pour les différents types de géométrie. Les valeurs des attributs contiennent le nom du modèle qui doit être exécuté pour ce type de géométrie. Si une géométrie n'a pas d'attribut de type dans l'élément conf, ou si l'attribut contient une chaîne vide, aucun modèle ne sera évalué.

Exemples

Si l'élément conf suivant est envoyé à une fonction, la fonction traitera le modèle ROAD sur toutes les géométries linéaires, le modèle POI sur toutes les géométries ponctuelles et le modèle PARCEL sur toutes les géométries surfaciques.

<conf line="ROAD" point="POI" polygon="PARCEL" />

Les valeurs suivantes sont des noms de types de géométrie valides pour l'élément conf :

aggregate box brepsolid
composite-solid composite-surface csgsolid
polygone troué ellipse extrusion
face line mesh
multi-area multi-curve multi-point
multi-solid multi-surface multi-text
null path point
pointcloud polygon raster
rectangle-face text triangle-fan
triangle-strip    

En plus des noms de type ci-dessus, il y a un certain nombre d'attributs qui peuvent être utilisés dans l'élément conf pour nommer un modèle à exécuter pour un groupe de types de géométries.

Nom attribut conf Effect
all Le modèle nommé sera évalué pour tout type de géométrie.
Area Le nom du modèle sera évalué pour les polygones, polygones troués et ellipses.
collection Le modèle sera évalué pour les agrégats et géométries multiples telles que les multi points, multi courbes...
curve Le nom du modèle sera évalué pour les lignes, arcs et chemins.

Si plus d'un nom d'attribut de conf est applicable à une géométrie, la valeur du nom d'attribut le plus spécifique sera utilisée. Ainsi, la valeur de l'attribut all ne sera utilisée que si aucun autre attribut n'est applicable.

Exemples

Si l'élément conf suivant est envoyé à une fonction, la fonction traitera le modèle SEGMENT sur toutes les géométries linéaires ou arcs, le modèle PATH sur les géométries chemin et le modèle OTHER sur toutes les autres géométries.

<conf curve="SEGMENT" path="PATH" all="OTHER" />

Alors que ces éléments conf nomment un modèle pour exécuter des géométries d'un type particulier, un trait géométrique peut être utilisé pour nommer un modèle qui doit être exécuté pour une instance géométrique particulière. En définissant le trait geometry_template sur une géométrie particulière avec un nom de modèle, les fonctions exécuteront ce modèle pour cette géométrie, plutôt que le modèle nommé dans l'élément conf.

Paramètres publiés

Le XQueryFactory peut récupérer les valeurs de tous les paramètres (ou macros) publiés dans un traitement (ou un fichier de contrôle).  Ces valeurs sont des variables globales dans une requête, et on peut y accéder en utilisant le préfixe "fme" et le nom du paramètre/macro.  Par exemple, pour accéder à la valeur de la macro FME_HOME, on peut utiliser la variable $fme:FME_HOME. En raison d'une restriction du langage XQuery, les paramètres/macros dont le nom commence par un chiffre ne sont pas accessibles de cette manière.