Funciones XPath y operadores
Se implementa un conjunto de XPath (XML Path Language) 2.0 en IBM® Business Monitor e IBM Business Monitor Development Toolkit.
Las tablas siguientes muestran los símbolos, operadores, símbolos de terminales y funciones de XPath 2.0 que están soportados en Business Monitor y Business Monitor Development Toolkit. Para obtener más información sobre XPath 2.0, incluida la sintaxis completa en EBNF (Extended Backus-Naur Form), consulte http://www.w3.org/TR/xpath20/.
Símbolos soportados
| Número | Símbolo | Consta de | Expresión |
|---|---|---|---|
| [1] | XPath | ::= | Expr |
| [2] | Expr | ::= | ExprSingle |
| [3] | ExprSingle | ::= | IfExpr | OrExpr |
| [7] | IfExpr | ::= | "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle |
| [8] | OrExpr | ::= | AndExpr ( "or" AndExpr )* |
| [9] | AndExpr | ::= | ComparisonExpr ( "and" ComparisonExpr )* |
| [10] | ComparisonExpr | ::= | RangeExpr ( (ValueComp | GeneralComp) RangeExpr )? |
| [11] | RangeExpr | ::= | AdditiveExpr |
| [12] | AdditiveExpr | ::= | MultiplicativeExpr ( ("+" | "-") MultiplicativeExpr )* |
| [13] | MultiplicativeExpr | ::= | UnionExpr ( ("*" | "div" | "idiv" | "mod") UnionExpr )* |
| [14] | UnionExpr | ::= | IntersectExceptExpr |
| [15] | IntersectExceptExpr | ::= | InstanceofExpr |
| [16] | InstanceofExpr | ::= | TreatExpr |
| [17] | TreatExpr | ::= | CastableExpr |
| [18] | CastableExpr | ::= | CastExpr |
| [19] | CastExpr | ::= | UnaryExpr |
| [20] | UnaryExpr | ::= | ("-" | "+")* ValueExpr |
| [21] | ValueExpr | ::= | PathExpr |
| [22] | GeneralComp | ::= | "=" | "!=" | "<" | "<=" | ">" | ">=" |
| [23] | ValueComp | ::= | "eq" | "ne" | "lt" | "le" | "gt" | "ge" |
| [25] | PathExpr | ::= | ("/" RelativePathExpr?) | RelativePathExpr |
| [26] | RelativePathExpr | ::= | StepExpr (("/") StepExpr)* |
| [27] | StepExpr | ::= | FilterExpr | AxisStep |
| [28] | AxisStep | ::= | (ReverseStep | ForwardStep) |
| [29] | ForwardStep | ::= | AbbrevForwardStep |
| [31] | AbbrevForwardStep | ::= | NodeTest |
| [32] | ReverseStep | ::= | AbbrevReverseStep |
| [34] | AbbrevReverseStep | ::= | ".." |
| [35] | NodeTest | ::= | NameTest |
| [36] | NameTest | ::= | QName |
| [38] | FilterExpr | ::= | PrimaryExpr |
| [41] | PrimaryExpr | ::= | Literal | ParenthesizedExpr | ContextItemExpr | FunctionCall |
| [42] | Literal | ::= | NumericLiteral | StringLiteral |
| [43] | NumericLiteral | ::= | IntegerLiteral | DecimalLiteral |
| [46] | ParenthesizedExpr | ::= | "(" Expr? ")" |
| [47] | ContextItemExpr | ::= | "." |
| [48] | FunctionCall | ::= | QName "(" (ExprSingle ("," ExprSingle)*)? ")" |
Soporte adicional para sucesos de entrada y salida
Para hacer referencia a sucesos de entrada y salida específicamente, utilice las vías de acceso siguientes.
InboundEventDefinitionRef '/' 'predefinedData' '/' (
'creationTime'|'elapsedTime'|'extensionName'|'globalInstanceId'|
'localInstanceId'|'msg'|'priority'|'repeatCount'|'sequenceNumber'|
'severity'|'version')
InboundEventDefinitionRef '/' 'propertyData' '/' ContextDataElementName
InboundEventDefinitionRef '/' 'extendedData' '/' ExtendedDataElementName (
'/' ExtendedDataElementName)*
InboundEventDefinitionRef '/' EventPartId '/' Expr
- InboundEventDefinitionRef es una vía de acceso a un punto de entrada de suceso o un punto de salida en una jerarquía de definición de contexto de supervisión. La vía de acceso puede incluir los ID de definiciones anidadas de contexto de supervisión, punto "." o dos puntos seguidos (".."). Debe tener como último paso un ID, y solamente uno, de una definición de suceso de entrada. Por ejemplo, itemContext/outOfStockEvent.
- ContextDataElementName es el nombre de un elemento de datos de contexto definido por el tipo Common Base Event del punto de salida o entrada del suceso al que se hace referencia. Se hace referencia a la definición de tipo de suceso Common Base Event pertinente mediante el atributo extensionName.
- ExtendedDataElementName es el nombre de un elemento de datos ampliado definido por el tipo Common Base Event de punto de salida o entrada del suceso al que se hace referencia. Se hace referencia a la definición de tipo de suceso pertinente mediante el atributo extensionName.
- EventPartId es el ID de una parte de suceso definida para el punto de entrada o salida al que se hace referencia.
- Expr es una vía de acceso a una estructura de datos de sucesos de entrada o salida, que se añade al final de la vía de acceso definida para la parte de suceso a la que se hace referencia mediante EventPartId. Para las vías de acceso a sucesos de entrada, se aplica la tabla 2. Para las vías de acceso de los sucesos de salida (es decir, los extremos de la izquierda de las asignaciones de campos de sucesos de salida) se aplica la tabla 3. Asimismo, los predicados numéricos que se utilizan para crear secuencias en sucesos de salida no deben contener espacios vacíos y deben ser ascendentes en cada nivel de anidación. Un paso que no tenga un predicado numérico es equivalente a uno seguido de [1].
| Símbolo | Expresión |
|---|---|
| Expr | UnionExpr | FunctionName '(' UnionExpr ')' |
| FunctionName | 'fn:count' | 'fn:avg' | 'fn:max' | 'fn:min' | 'fn:sum' |
| UnionExpr | PathExpr ('|' PathExpr)* |
| PathExpr | (StepExpr '/')* (StepExpr | ('@' | 'attribute::') AttrNameTest | ('child::')? 'text()') |
| StepExpr | ('.' | ('child::')? NameTest) ('[' PredicateExpr ']')* |
| NameTest | QName | '*' | NCName ':' '*' |
| AttrNameTest | NameTest | '*' ':' NCName |
| PredicateExpr | OrExpr | Digits |
| OrExpr | AndExpr ('or' AndExpr)* |
| AndExpr | BooleanExpr ('and' BooleanExpr)* |
| BooleanExpr | '(' OrExpr ')' | ValueExpr GeneralComp ValueExpr | ('@' | 'attribute::') AttrNameTest |
| GeneralComp | '=' | '!=' | '<' | '<=' | '>' | '>=' |
| ValueExpr | ('@' | 'attribute::') AttrNameTest | Literal |
| Literal | NumericLiteral | StringLiteral |
| StringLiteral | ('"' (EscapeQuot | [^"])* '"') | ("'" (EscapeApos | [^'])* "'") |
| NumericLiteral | IntegerLiteral | DecimalLiteral | DoubleLiteral |
| IntegerLiteral | [+-]? Digits |
| DecimalLiteral | [+-]? ('.' Digits) | (Digits '.' [0-9]*) |
| DoubleLiteral | [+-]? (('.' Digits) | (Digits ('.' [0-9]*)?)) [eE] [+-]? Digits |
| EscapeQuot | '""' |
| EscapeApos | "''" |
| Digits | [0-9]+ |
| Símbolo | Expresión |
|---|---|
| Expr | PathExpr |
| PathExpr | (StepExpr '/')* ( StepExpr | '@' AttrNameTest ) |
| StepExpr | NameTest ('[' Digits ']')? |
| NameTest | QName |
| AttrNameTest | NameTest |
| Digits | [0-9]+ |
Operadores soportados
| Número | Operador |
|---|---|
| 3 | if |
| 4 | or |
| 5 | y |
| 6 | eq, ne, lt, le, gt, ge, =, !=, <, <=, >, >= |
| 8 | +, - |
| 9 | *, div, idiv, mod |
| 16 | -(unary), +(unary) |
| 18 | / |
| 19 | ( ) |
Para los operandos que no son nulos, los operadores de comparación de valores (ne, lt, le, gt, ge) y los operadores de comparación generales (=, !=, <, <=, >, >=) se comportan de idéntica manera. No obstante, si uno o ambos operandos son nulos (secuencias vacías), una comparación de valores devuelve nulo, mientras que una comparación general devuelve false.
Símbolos de terminal soportados
| Número | Símbolo | Consta de | Expresión |
|---|---|---|---|
| [71] | IntegerLiteral | ::= | Digits |
| [72] | DecimalLiteral | ::= | ("." Digits) | (Digits "." [0-9]*) |
| [74] | StringLiteral | ::= | ("'" (EscapeApos | [^'])* "'") |
| [76] | EscapeApos | ::= | " '' " |
Acceso a elementos en listas
myEvent/myEventPart/theOrder/item[12]/price
fn:sum(myEvent/myEventPart/theOrder/item/price)
Para obtener más información, consulte Agregar funciones.Funciones de constructor soportadas
- xs:boolean($arg as xs:boolean?) as xs:boolean?
- xs:boolean($arg as xs:integer?) as xs:boolean?
- xs:boolean($arg as xs:decimal?) as xs:boolean?
- xs:boolean($arg as xs:string?) as xs:boolean?
- xs:integer($arg as xs:boolean?) as xs:integer?
- xs:integer($arg as xs:integer?) as xs:integer?
- xs:integer($arg as xs:decimal?) as xs:integer?
- xs:integer($arg as xs:string?) as xs:integer?
- xs:decimal($arg as xs:boolean?) as xs:decimal?
- xs:decimal($arg as xs:integer?) as xs:decimal?
- xs:decimal($arg as xs:decimal?) as xs:decimal?
- xs:decimal($arg as xs:string?) as xs:decimal?
- xs:decimal($arg as xs:duration?) as xs:decimal?
- xs:string($arg as xs:boolean?) as xs:string?
- xs:string($arg as xs:integer?) as xs:string?
- xs:string($arg as xs:decimal?) as xs:string?
- xs:string($arg as xs:string?) as xs:string?
- xs:string($arg as xs:duration?) as xs:string?
- xs:string($arg as xs:dateTime?) as xs:string?
- xs:string($arg as xs:date?) as xs:string?
- xs:string($arg as xs:time?) as xs:string?
- xs:duration($arg as xs:string?) as xs:duration?
- xs:duration($arg as xs:duration?) as xs:duration?
- xs:duration($arg as xs:decimal?) as xs:duration?
- xs:dayTimeDuration($arg as xs:integer?) as xs:dayTimeDuration?
- xs:dayTimeDuration($arg as xs:decimal?) as xs:dayTimeDuration?
- xs:dayTimeDuration($arg as xs:string?) as xs:dayTimeDuration?
- xs:dayTimeDuration($arg as xs:duration?) as xs:dayTimeDuration?
- xs:dateTime($arg as xs:string?) as xs:dateTime?
- xs:dateTime($arg as xs:dateTime?) as xs:dateTime?
- xs:dateTime($arg as xs:date?) as xs:dateTime?
- xs:date($arg as xs:string?) as xs:date?
- xs:date($arg as xs:dateTime?) as xs:date?
- xs:date($arg as xs:date?) as xs:date?
- xs:time($arg as xs:string?) as xs:time?
- xs:time($arg as xs:dateTime?) as xs:time?
- xs:time($arg as xs:time?) as xs:time?
Las funciones de constructor booleanas con argumentos numéricos devuelven true si el argumento es distinto de cero y false si es igual a cero. Las funciones de constructor numéricas con argumento booleano devuelven 1 si el argumento es true y 0 si es false. Las funciones de constructor de entero con argumento decimal descartan las partes fraccionarios del argumento. Los constructores que convierten entre valores decimales y valores de duración correlacionan una duración de hora del día con su longitud en segundos (incluidos los segundos fraccionarios) y viceversa. Todos los constructores con argumentos de serie esperan una representación léxica válida del tipo de datos del resultado. Las funciones de constructor que devuelven un valor de serie devuelven la representación léxica canónica del argumento. El constructor dateTime con un argumento de fecha devuelve el primer instante de la fecha especificada.
Funciones generales soportadas
- fn:abs($arg as xs:integer?) as xs:integer?
- fn:abs($arg as xs:decimal?) as xs:decimal?
- fn:round($arg as xs:decimal?) as xs:decimal?
- fn:round($arg as xs:integer?) as xs:integer?
- fn:concat($arg1 as xs:anyAtomicType?, $arg2 as xs:anyAtomicType?, ... ) as xs:string
- fn:compare($comparand1 as xs:string?, $comparand2 as xs:string?) as xs:integer?
- fn:substring($sourceString as xs:string?, $startingLoc as xs:integer) as xs:string
- fn:substring($sourceString as xs:string?, $startingLoc as xs:decimal) as xs:string
- fn:substring($sourceString as xs:string?, $startingLoc as xs:integer, $length as xs:integer) as xs:string
- fn:substring($sourceString as xs:string?, $startingLoc as xs:integer, $length as xs:decimal) as xs:string
- fn:substring($sourceString as xs:string?, $startingLoc as xs:decimal, $length as xs:integer) as xs:string
- fn:substring($sourceString as xs:string?, $startingLoc as xs:decimal, $length as xs:decimal) as xs:string
- fn:string-length($arg as xs:string?) as xs:integer?
- fn:upper-case($arg as xs:string?) as xs:string
- fn:lower-case($arg as xs:string?) as xs:string
- fn:contains($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean
- fn:starts-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean
- fn:ends-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean
- fn:true() as xs:boolean
- fn:false() as xs:boolean
- fn:not($arg as xs:boolean?) as xs:boolean
- fn:not($arg as xs:integer?) as xs:boolean
- fn:not($arg as xs:decimal?) as xs:boolean
- fn:not($arg as xs:string?) as xs:boolean
- fn:empty($arg as xs:anyAtomicType?) as xs:boolean
- fn:exists($arg as xs:anyAtomicType?) as xs:boolean
- fn:current-dateTime() as xs:dateTime
- fn:current-date() as xs:date
- fn:current-time() as xs:time
- fn:days-from-duration($arg as xs:duration?) as xs:integer?
- fn:hours-from-duration($arg as xs:duration?) as xs:integer?
- fn:minutes-from-duration($arg as xs:duration?) as xs:integer?
- fn:seconds-from-duration($arg as xs:duration?) as xs:decimal?
- fn:year-from-dateTime($arg as xs:dateTime?) as xs:integer?
- fn:month-from-dateTime($arg as xs:dateTime?) as xs:integer?
- fn:day-from-dateTime($arg as xs:dateTime?) as xs:integer?
- fn:hours-from-dateTime($arg as xs:dateTime?) as xs:integer?
- fn:minutes-from-dateTime($arg as xs:dateTime?) as xs:integer?
- fn:seconds-from-dateTime($arg as xs:dateTime?) as xs:decimal?
- fn:timezone-from-dateTime($arg as xs:dateTime?) as xs:dayTimeDuration?
- fn:year-from-date($arg as xs:date?) as xs:integer?
- fn:month-from-date($arg as xs:date?) as xs:integer?
- fn:day-from-date($arg as xs:date?) as xs:integer?
- fn:timezone-from-date($arg as xs:date?) as xs:dayTimeDuration?
- fn:hours-from-time($arg as xs:time?) as xs:integer?
- fn:minutes-from-time($arg as xs:time?) as xs:integer?
- fn:seconds-from-time($arg as xs:time?) as xs:decimal?
- fn:timezone-from-time($arg as xs:time?) as xs:dayTimeDuration?
- fn:adjust-dateTime-to-timezone($arg as xs:dateTime?) as xs:dateTime?
- fn:adjust-dateTime-to-timezone($arg as xs:dateTime?, $timezone as xs:dayTimeDuration?) as xs:dateTime?
- fn:adjust-date-to-timezone($arg as xs:date?) as xs:date?
- fn:adjust-date-to-timezone($arg as xs:date?, $timezone as xs:dayTimeDuration?) as xs:date?
- fn:adjust-time-to-timezone($arg as xs:time?) as xs:time?
- fn:adjust-time-to-timezone($arg as xs:time?, $timezone as xs:dayTimeDuration?) as xs:time?
- fn:count($arg as item()*) as xs:integer
- fn:avg($arg as xs:integer*) as xs:decimal?
- fn:avg($arg as xs:decimal*) as xs:decimal?
- fn:max($arg as xs:integer*) as xs:integer?
- fn:max($arg as xs:decimal*) as xs:decimal?
- fn:min($arg as xs:integer*) as xs:integer?
- fn:min($arg as xs:decimal*) as xs:decimal?
- fn:sum($arg as xs:integer*) as xs:integer?
- fn:sum($arg as xs:decimal*) as xs:decimal?
Funciones de agregación
Se admiten las cinco funciones de agregación fn:count, fn:avg, fn:max, fn:min y fn:sum (definidas en http://www.w3.org/TR/xpath-functions/#aggregate-functions), siempre que su argumento haga referencia a datos de un suceso de entrada. El argumento de fn:count() puede tener cualquier tipo. Las otras cuatro funciones deben tener argumentos numéricos.
Por ejemplo, fn:sum(myEvent/extendedData/widgetList/widget/quantity) devuelve el número total de widgets de una lista que contiene elementos de datos ampliados.
fn:avg(myEvent/listOfItems/tns:item/@tns:cost) devuelve el coste medio por artículo de una lista representada por la parte de suceso listOfItems.
Recuperación de valores QName
El valor de un atributo o elemento del suceso con un tipo de datos definido como xs:QName se recupera como una serie del formato: {namespaceName}localPart. El nombre del espacio de nombres se obtiene resolviendo el prefijo de QName, basándose en las declaraciones de espacio de nombres en el suceso. Por ejemplo, si el suceso contiene la declaración de espacio de nombres xmlns:app="http://www.my.com/my/application/namespace", el valor de QName app:customerRating se recuperará como {http://www.my.com/my/application/namespace}customerRating.
Comparación de husos horarios
- Ambos valores deben estar asociados a un huso horario, O
- Ninguno de los valores debe estar asociado a un huso horario