Skip to main content
ExLibris
  • Subscribe by RSS
  • Ex Libris Knowledge Center

    Configurar reglas de normalización para campos de visualización y campos locales

    Última actualización: 29 de noviembre de 2023

    Regresar al menú

    Introducción

    Las reglas de normalización proporcionan los componentes básicos para controlar y modificar la forma en que los usuarios ven los metadatos en los registros bibliográficos. Primo VE le permite modificar las reglas de normalización para los campos de despliegue en su configuración original (como Título o Colaborador). También puede crear reglas de normalización para campos de despliegue locales para que pueda controlar el despliegue de metadatos adicionales en el registro que no está mapeado a uno de los campos de despliegue de la configuración original. Los cambios aplicados están inmediatamente disponibles para su descubrimiento en Primo VE. Para más información sobre cómo crear campos de visualización y campos locales, véase Configurar campos de visualización locales y campos de búsqueda para Primo VE.

    Esta página describe la sintaxis utilizada para crear las reglas de normalización que se definen con las herramientas de Drools. Recomendamos que empiece con una regla existente que sea similar a la regla que quiera definir y que la modifique según sea necesario. Para consultar ejemplos adicionales con los cuales comenzar, véase Ejemplos de Reglas de Normalización.

    • El término MARC en esta página se refiere a los siguientes formatos admitidos en Primo VE: MARC21, UNIMARC, KORMARC y CNMARC.

    • Asegúrese de utilizar el carácter de comillas (u+0022) como se especifica para los distintos elementos de las reglas de normalización.

    Certificación de administración de Primo VE - Campos locales (11 min.)

    Sintaxis de las reglas de normalización

    Cada campo de despliegue y cada campo local pueden poseer una o más reglas que contengan un conjunto de condiciones y un conjunto de acciones que se apliquen a los registros, cuando se cumplan todas las condiciones para la regla. Cada acción dentro de una regla se puede ejecutar en un solo campo, y se lleva a cabo en el orden en el que aparezca en la regla.

    Al aplicar múltiples reglas a un campo de despliegue o a un campo local, puede que desee especificar una prioridad (por defecto es 0 si no se especifica) para cada regla. Las acciones estipuladas en la regla con el valor de mayor prioridad se ejecutan primero. Por ejemplo, las acciones en una regla con prioridad 2 se ejecutan antes que las acciones en una regla con prioridad 1. Solo es necesario asignar una prioridad cuando las reglas aplican acciones al mismo campo, y estas deben realizarse en una secuencia específica. Si no se asigna ninguna prioridad a las reglas, estas se procesan desde la parte superior hacia abajo.

    rule "title"

         priority <rule with highest number receives priority>

         cuando

              Condition1 <Boolean operator>

              Condition2 <Boolean operator>

                 ...

              Condition(n)

         then

              Action1

                 ...

              Action(n)

    end

    • Cuando el mapeo de un campo de despliegue o un campo local contiene más de una instancia para la regla, el título de cada regla debe ser único. Por ejemplo:

      regla "Primo VE Display - contributor 700"
      regla "Primo VE Display - contributor 700/2"
    • Para los campos locales, el título de la primera regla debe usar el siguiente formato basado en si el campo local se usa para despliegue (Lds) o búsqueda/facetas (Lsr):

      regla "Primo VE - <display_or_search><local field number>"

      Por ejemplo, si está creando una regla para un campo de despliegue local 100, debe usar el título siguiente:

      regla "Primo VE - Lds100"
    • Las instrucciones cuando, entonces y fin deben estar en su propia línea.

    • Cada regla debe cerrarse con una instrucción de fin.

    • Solo se permiten los operadores booleanos dentro de la cláusula cuando.

    • Si bien está permitido incluir varios operadores booleanos en las reglas, cuando se especifica un gran número de ellos, es probable que el rendimiento sea más lento. Por lo tanto, cada regla no debe incluir más de 200 operadores booleanos.

    Condiciones

    La cláusula cuando contiene una o más condiciones (separadas por operadores booleanos) que deben cumplir los metadatos en el registro, antes de ejecutar una o más acciones, y que se definen en la cláusula entonces. Se le puede dar prioridad a grupos de condiciones encerrándolos entre paréntesis (véase Agrupar Condiciones). Consulte Rutinas de Java para ver cuáles de las rutinas se pueden emplear en las cláusulas cuando.

    Por ejemplo:

    # An example of a "when" condition clause.

     

    when

         MARC is "502"."a"

     

    ----------------------

     

    # An example of a "when" condition clause with Boolean operators and a group.

     

    when

         MARC."502" has any "a,b,c" AND

         (MARC."502"."a" match ".*" AND MARC."502"."b" match ".*" OR

         MARC."502"."a" match ".*" AND MARC."502"."c" match ".*")

     

    Al crear un conjunto de condiciones para una regla:

    • Si necesita escribir o verificar campos MARC en las cláusulas cuando y entonces, asegúrese de verificar su existencia antes de usarlos. Véase Comprobaciones de Existencia para obtener más información.

    • Si necesita referirse a subcampos específicos en las cláusulas cuando y entonces, asegúrese de verificar su existencia antes de usarlos.

    • Después de haber comprobado la existencia de un campo o subcampo, puede añadir comprobaciones de comparación para comparar información en los subcampos. Véase Comprobaciones de Comparación para obtener más información.

    • No coloque las comprobaciones de comparación en la misma línea que las comprobaciones de existencia. Comience las comprobaciones de comparación en la línea siguiente a una comprobación de existencia.

    • Asegúrese de que todos los conjuntos de condiciones contengan una verificación de existencia. Por ejemplo, si un conjunto de condiciones a ambos lados del operador OR proporciona condiciones independientes, cada parte debe incluir una verificación de existencias. Para más información, consulte el Operador OR.

    No se le permite comprobar la existencia de un campo o subcampo más de una vez. Al comprobar la existencia de un subcampo, también se verifica la existencia del campo.

    La siguiente tabla describe la sintaxis de las posibles condiciones para MARC:

    Condiciones MARC
    Condición Ejemplo
    Verificaciones de existencia:

    es: Verifica la existencia del campo especificado y de un subcampo, si se especifica. Formatos válidos:

    • MARC is "<field>"
    • MARC is "<field>"."<subfield>"
    • MARC.control is "<control number_or_LDR>"

    Si ha comprobado la existencia de un campo MARC (con o sin subcampos específicos) mediante la verificación tiene algún o es en el lado izquierdo de la operación AND NOT, y quiere verificar la inexistencia de otro campo MARC que tiene uno o más subcampos específicos, debe utilizar la verificación tiene algún en el lado derecho de la operación AND NOT. Por ejemplo:


    MARC is "502"."a,b,c" AND NOT MARC."505" has any "a"

    # El campo MARC 880 existe.

    MARC is "880"

    # El campo MARC 260 existe y tiene el subcampo c.

    MARC is "260"."c"

    # El campo de control MARC 001 existe.

    MARC.control is "001"

    # La cabecera MARC existe.

    MARC.control is "LDR"

    tiene algún : Comprueba la existencia del campo especificado y de cualquiera de sus subcampos incluidos. Formato válido:

    MARC."<field>" has any "<subfield list>"

    # El campo 700 existe y tiene uno o más de los siguientes subcampos: a, b, c, d, e, j, q y u.

    MARC."700" has any "a,b,c,d,e,j,q,u"

    # El campo 700 existe y tiene alguno de los siguientes subcampos: a, b, c, f, g o h.

    MARC."700" has any "a-c,f-h"
    Verificaciones de existencia combinada y de comparación:

    coincide con (Verificación de cabecera) - Verifica la existencia del campo de Cabecera y utiliza una expresión regular para hallar información coincidente en cualquier lugar de la posición especificada en la Cabecera. Formato válido:

    MARC.control."LDR"(start_position-end_position) matches "<Java_regex>"

    # Comprueba la existencia del campo de Cabecera y se asegura de que el primer carácter de la izquierda sea un número:

    MARC.control."LDR"(0-1) matches "0-9"

    # Comprueba la existencia del campo de Cabecera y se asegura de que los dos caracteres en las posiciones 6 y 7 sean alguno de los pares de caracteres especificados:

    MARC.control."LDR"(6-8) matches "ab|ai|as"

    es igual a (Verificación de cabecera) - Comprueba la existencia del campo de Cabecera y asegura que todo el contenido entre el comienzo especificado y la posición final en la Cabecera sea igual al valor indicado. Formato válido:

    MARC.control."LDR"(start_position-end_position) equals "<value>"

    # Verifica la existencia del campo de Cabecera y asegura que el primer carácter de la izquierda sea igual a 0:

    MARC.control."LDR"(0-1) equals "0"

    no es igual a - Verifica la existencia del campo de Cabecera y asegura que todo el contenido entre el comienzo especificado y la posición final en la Cabecera no sea igual al valor indicado. Formato válido:

    MARC.control."LDR"(start_position-end_position) does not equal "<value>"

    # Comprueba la existencia del campo de Cabecera y se asegura de que el primer carácter de la izquierda no sea igual a 0:

    MARC.control."LDR"(0-1) does not equal "0"

    Verificaciones de comparación:

    coincide con - Tras verificar primero la existencia de un campo, esta operación le permite usar una expresión regular para hallar información coincidente específica en un subcampo. Formato válido:

    MARC."<field>"."<subfield>" match "<Java_regex>"

    # El campo 880 tiene un subcampo 6 que coincide con la expresión 505-.*. La parte .* de la expresión significa que acepta cualquier cosa después de la secuencia.

    MARC."880"."6" match "505-.*"

    # El campo 562 tiene un subcampo 5 que coincide con un código de biblioteca específico (como MAIN).

    MARC."562"."5" match "MAIN"

    es igual a (verificación de indicador) - Tras comprobar primero la existencia de un campo, esta operación le permite hallar coincidencias entre el contenido del indicador especificado y su valor. Formatos válidos:

    MARC."<field>".ind"<indicator>" equals "<value>"

    # El primer indicador del campo MARC 260 es un 3.

    MARC."260".ind"1" equals "3"

    Utilizar Operadores Booleanos en la Cláusula Cuando

    Los operadores booleanos le permiten combinar condiciones para crear filtros más complejos que determinen si un campo o subcampo coincide con los requisitos necesarios, ya sea para escribir o modificar su contenido en la cláusula entonces (consulte Acciones). En general, se evalúa una serie de las mismas operaciones booleanas de izquierda a derecha, pero se otorga la siguiente prioridad si las operaciones booleanas son mixtas:

    1. AND NOT

    2. Y

    3. O

    Puede ignorar la prioridad encerrando grupos de condiciones entre paréntesis. Para más información, véase Agrupar Condiciones.

    Operador AND

    Este operador booleano indica que la siguiente condición debe ser verdadera. No puede utilizarse entre dos comprobaciones de existencia para el mismo campo, pero puede ser usado para añadir una comparación de subcampo al mismo campo o para comprobar la existencia de otro campo:

    This rule checks for the existence of both the MARC 502 field with any of the a, b, and c subfields and the MARC 505 fields with the 'b' subfield.

     

    rule "Primo VE - Lds05"

         when

              MARC."502" has any "a,b,c" AND MARC is "505"."d"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # FAILS - This rule attempts to check for the existence of the MARC 502 field and the 'd' subfield and any of the a, b, and c subfields. Since the existence of the 502 field is checked twice, it will fail compilation. 

     

    rule "Primo VE - Lds05"

         when

              MARC."502" has any "a,b,c" AND MARC is "502"."d"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # This rule checks for the existence of the MARC 502 field and the 'd' subfield and any of the a, b, and c subfields. The existence of the MARC 502 field is checked only once. Comparison checks are made on the specific subfields whose existence was checked only once.

     

    rule "Primo VE - Lds05"

         when

              MARC."502" has any "a,b,c,d" AND

              (MARC."502"."a" match ".*" OR MARC."502"."b" match ".*" OR MARC."502"."c" match ".*") AND

              MARC."502"."d" match ".*"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

    AND NOT Operator

    Este operador booleano indica que la siguiente condición no debe ser verdadera. No puede utilizarse entre dos comprobaciones de existencia para el mismo campo, pero sí para añadir una comparación de subcampo para el mismo campo o para comprobar la existencia de otro campo:

    This rule checks for the existence of the MARC 502 field and the nonexistence of the MARC 505 field.

     

    rule "Primo VE - Lds05"

         when

              MARC is "502"."a" AND NOT MARC."505" has any "a"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    -----------------------

     

    # FAILS - This rule attempts to find records that have a nonempty 502 'a' subfield and an empty 'b' subfield. Since this rule attempts to check for the existence and nonexistence of the MARC 502 field, it will fail compilation.

     

    rule "Primo VE - Lds05"

         when

              MARC is "502"."a" AND NOT MARC."502" has any "b"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    -----------------------

     

    # This rule finds records that have a nonempty 502 'a' subfield and an empty 'b' subfield.

     

    rule "Primo VE - Lds05"

         when

              MARC."502" has any "a,b"

              MARC."502"."a" match ".*" AND NOT MARC."502"."b" match ".*"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

    OR Operator

    Este operador booleano indica que la siguiente condición puede ser verdadera o no. Al usar este operador para enlazar una serie de Verificaciones de comparación, es necesario asegurarse de que el conjunto de condiciones tanto a la izquierda como a la derecha del operador OR contenga una verificación de existencia. Quizá sea necesario agrupar condiciones para asegurar que las verificaciones de comparación no sean tratadas como condiciones independientes por el compilador Drools.

    This rule checks for the existence of either the MARC 502 field and a, b, or c subfields or the MARC 502 field and 'd' subfield. This passes because existence checks were placed on both sides of the OR operator.

     

    rule "Primo VE - Lds05"

         when

              MARC."502" has any "a,b,c" OR MARC is "502"."d"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # This rule checks for the existence of a 502 field and makes sure that either subfields a, b, and c are not empty or subfields d is not empty.

     

    rule "Primo VE - Lds05"

         when

              MARC es "502" Y
              (MARC."502"."a" match ".*" Y MARC."502"."b" match ".*" Y
               MARC."502"."c" match ".*" O MARC."502"."d" match ".*")

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # This rule checks for the existence of a 502 field and makes sure that subfields a and b and c are not empty and either subfield c or d is not empty.

     

    rule "Primo VE - Lds05"

         when

              MARC es "502" Y
              MARC."502"."a" match ".*" Y MARC."502"."b" match ".*" Y
              (MARC."502"."c" match ".*" O MARC."502"."d" match ".*")

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # FAILS - This rule fails compilation because the set of conditions on the right side of the OR operator do not contain an existence check.

     

    rule "Primo VE - Lds05"

         when

              (MARC es "502" Y
              MARC."502"."a" match ".*" Y MARC."502"."b" match ".*" Y
              MARC."502"."c" match ".*") O MARC."502"."d" match ".*"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    ----------------------

     

    # FAILS - This is treated the same as the previous example.

     

    rule "Primo VE - Lds05"

         when

              MARC es "502" Y
              MARC."502"."a" match ".*" Y MARC."502"."b" match ".*" Y
              MARC."502"."c" match ".*" O MARC."502"."d" match ".*"

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

    ----------------------

     

    # This rule checks for the existence of a 502 field and makes sure that either subfields a and b and c are not empty or subfield d is not empty.

     

    rule "Primo VE - Lds05"

         when

              (MARC es "502" Y
              (MARC."502"."a" match ".*" Y MARC."502"."b" match ".*" Y
              MARC."502"."c" match ".*") O MARC."502"."d" match ".*")

         then

              create pnx."display"."lds05" with MARC "502" subfields

    end

     

    Agrupar Condiciones

    Si desea ignorar la prioridad de los operadores booleanos, puede agrupar condiciones encerrándolas entre paréntesis de modo que se procesen juntas. Cuando los grupos están anidados, los grupos más internos se tratan primero. Los grupos y las condiciones dentro de cada grupo continuarán utilizando la prioridad de los operadores booleanos (véase Utilizar Operadores Booleanos en la Cláusula Cuando).

    Por ejemplo:

    # The following series of conditions passes when the MARC field exists and either subfields a and b are not empty or subfields c and d are not empty:

     

    rule "Primo VE - Lds05"

         when

              MARC is "502" AND

              (MARC."502"."a" match ".*" AND MARC."502"."b" match ".*" OR MARC."502"."c" match ".*" AND MARC."502"."d" match ".*")

     

    ----------------------

     

    # With parentheses, the same series of conditions passes when the MARC field exists and either subfields a,b, and d are not empty or subfields a,c, and d are not empty:

     

    rule "Primo VE - Lds05"

         when

              

              MARC is "502" AND

              (MARC."502"."a" match ".*" AND (MARC."502"."b" match ".*" OR MARC."502"."c" match ".*") AND MARC."502"."d" match ".*")

     

    Al agrupar condiciones, debe asegurarse de que todos los resultados condicionales incluyan verificaciones de existencia. Para más información, véase Operador OR.

    Acciones

    La cláusula entonces le permite aplicar acciones a un único campo en un registro según las condiciones especificadas en la regla. Si se cumplen todas las condiciones, las acciones se aplicarán al registro en el orden en que aparezcan en la lista. Las acciones se ejecutan desde arriba hacia abajo.

    Por ejemplo:

    # A simple "then" clause that writes all subfields from a MARC field to an out-of-the-box display field.

     

    then

         create pnx."display"."alternate_contributor" with MARC."880" subfields

    end

    Además, puede usar cualquiera de las rutinas predefinidas de Java como acciones en la cláusula entonces. Para más información, véase Rutinas de Java.

    No se permiten operadores booleanos entre las acciones.

    La siguiente tabla describe la sintaxis de las posibles acciones de MARC:

    Acciones de MARC
    Acción Ejemplos
    Acciones de asignación: Le permiten guardar información desde un campo MARC a un campo de despliegue/búsqueda o a un campo temporal (TEMP"i"). 

    configurar – Esta acción cambia los contenidos de un campo existente. Si no existe un campo, este se crea. Formato válido:

    set <field> to <field>

    set pnx."display"."contents" to TEMP"1"

    set TEMP"1" to pnx."display"."contents"

    crear – Esta acción crea un campo de despliegue PNX y configura su contenido al valor de un campo especificado. Si ya existe un campo de despliegue, se agrega un campo adicional. Formato:

    create <PNX field> with <field>

    create pnx."display"."contents" with MARC "505"."a"

    Acciones de subcampo: Le permiten incluir/excluir subcampos de un campo MARC durante la asignación de un campo MARC a un campo de despliegue/búsqueda o a un campo temporal (TEMP"i").

    excluir subcampos numéricos sin ordenar - Esta acción solo emplea subcampos no numéricos y los coloca en el orden en el que aparecen en el registro MARC. Formato válido:

    excluding num subfields without sort

    create pnx."display"."contents" with MARC "505" excluding num subfields without sort

    excluir subcampos sin ordenar - Esta acción excluye todos los subcampos especificados y pone los restantes en el orden en el que aparecen en el registro MARC. Formato válido:

    excluding subfields without sorting "<subfield list>"

    En la <subfield list>:

    • Se debe utilizar un guion (-) para especificar un rango de subcampos.

    • El subcampo y los rangos de subcampo deben estar delimitados por los siguientes caracteres: coma, barra vertical (|) o espacio.

    crear pnx."display"."contents" con MARC "505" excluyendo subcampos sin ordenar "a-c"

    Ejemplos de lista de subcampos:

    • "a-d"
    • "a b c d"
    • "a|b|c|d"
    • "a,b,c,d"
    • "a-c,d"

    subcampos - Esta acción utiliza todos los subcampos, o bien solo los subcampos especificados, y los ordena por la letra/el número de subcampo y no por el orden en el que aparecen en el registro MARC. Formato:

    subfields "<subfield list>"

    Puede emparejar las opciones delimitado por y eliminar subsecuencia usando regex para eliminar los caracteres que coinciden con la expresión regular especificada y para ubicar el delimitador indicado entre todos los subcampos especificados:

    subfields "<subfield list>" delimited by "<string>" remove substring using regex "<Java_regex>"

    Las opciones delimitado por y eliminar subsecuencia usando regex no se pueden usar por separado con la acción subcampos

    create pnx."display"."contents" with MARC "505" subfields

    create pnx."display"."contents" with MARC "505" subfields "a-c"

     

    create pnx."display"."contents" with MARC "505" subfields "a-c" delimited by "--" remove substring using regex "\\.+$"

    sub sin ordenar - Esta acción utiliza los subcampos especificados y los coloca en el orden en el que aparecen en el registro MARC. Formato válido:

    sub without sort "<subfield list>"

    La opción delimitado por le permite colocar un delimitador entre los subcampos especificados.

    sub without sort "<subfield list>" delimited by "<string>"

    Cuando se usa la opción ajustar campos junto con la acción de transformación reemplazar delimitadores de ajuste, puede añadir delimitadores como prefijos o sufijos a cada subcampo especificado en la lista:

    sub without sort "<subfield list>" wrap subfields

    Como la acción ajustar subcampos agrega un marcador de posición antes y después de cada subcampo en la lista, los marcadores de un subcampo aparecerán en el resultado si no son reemplazados por la acción correspondiente reemplazar delimitadores de ajuste.

    set TEMP"1" to MARC."710" sub without sort "a,b,c,d,e"

     

    set TEMP"1" to MARC."710" sub without sort "a,b,c,d,e" delimited by " "

     

    set TEMP"1" to MARC."200" sub without sort "a,b,c,d,e,f,g,h,i,v" wrap subfields

    Acciones de transformación: Le permiten buscar y modificar datos de un campo. 

    eliminar subsecuencia usando regex – Esta acción elimina una subsecuencia del contenido de un campo temporal al usar una expresión regular especificada. Formato válido:

    remove substring using regexp (TEMP"<index>","<Java_regex >")

    Si esta acción se aplica a un subcampo que no existe, puede que no se creen el despliegue ni el campo local o que queden incompletos.

    remove substring using regex (TEMP"1","(/|:|;|=|,)+$")

    concatenar con delimitador – Esta acción concatena los contenidos de dos campos temporales y los separa con un delimitador. El resultado aparece en el primer campo temporal. Formato:

    concatenate with delimiter (TEMP"<index>",TEMP"<index>","<delimiter>")

    concatenate with delimiter (TEMP"1",TEMP"2","")

    añadir prefijo – Esta acción añade el valor especificado al principio del campo temporal. Formato válido:

    add prefix (TEMP"<index>","<value>")

    add prefix (TEMP"2","$$Q")

    añadir sufijo- Esta acción añade el valor especificado al final del campo temporal. Formato válido:

    add suffix (TEMP"<index>","<value>")

    add suffix (TEMP"2","$$Q")

    reemplazar secuencia por secuencia – Esta acción reemplaza todas las instancias de una expresión regular con un valor especificado. Formato válido:

    replace string by string (TEMP"<index>","<Java_regex>","<string>")

    replace string by string (TEMP"1","[^0-9]","\\?")

    reemplazar delimitadores de ajuste - Esta acción se usa junto con la acción de subcampo ajustar subcampos y le permite colocar un delimitador específico antes y después de un subcampo especificado. Formato válido:

    replace wrapping delimiters (TEMP"<index>","<subfield>","<prefix_delimiter>","<suffix_delimiter>")

    Para más ejemplos, consulte las reglas de normalización UNIMARC predeterminadas para campos de visualización de Título y Editor.

    set TEMP"1" to MARC."200" sub without sort "a,b,c,d,e,f,g,h,i,v" wrap subfields

    reemplazar delimitadores de ajuste (TEMP"1","a"," ; ","")

    reemplazar delimitadores de ajuste (TEMP"1","b"," [","]")

    devolver lista usando regex – Esta acción busca todas las instancias de una expresión regular en el segundo campo temporal y las copia como una lista en el primer campo temporal. Formato válido:

    return list using regex (TEMP"<index>",TEMP"<index>","<Java_regex>")

    return list using regex (TEMP"1",TEMP"2","[a-z]{3}")

    eliminar secuencia – Esta acción elimina una secuencia específica de un campo temporal. Formato válido:

    remove string (TEMP"<index>","<value>")

    remove string (TEMP"1","<<")

    eliminar espacios iniciales y finales – Esta acción elimina los espacios iniciales y finales de un campo temporal. Formato válido:

    remove leading and trailing spaces (TEMP"<index>")

    remove leading and trailing spaces (TEMP"1")

    reemplazar espacios – Esta acción reemplaza todos los espacios en un campo temporal con un caracter o una secuencia específicos. Formato válido:

    replace spaces (TEMP"<index>","<string>")

    replace spaces (TEMP"1"," ")

    minúscula – Esta acción cambia todas las letras de un campo temporal a minúscula. Formato válido:

    lower case (TEMP"<index>")

    lower case (TEMP"1")

    multilingüe – Cuando se agrega a las reglas de normalización para los campos de despliegue Materia, Creador o Colaborador, el sistema utiliza la tabla de mapeo Configuración multilingüe para mostrar las entradas que son específicas del idioma de despliegue seleccionado en Primo VE. Para más detalles, consulte Configuración multilingüe en Primo VE. Formato válido:

    multilingual by "MARC_field" "Display_Field" "display"

    Por defecto, la transformación multilingüe está activada en las reglas de normalización. Si se omite, todas las entradas para el campo de despliegue aparecen en las facetas y en los detalles del registro sin importar la configuración del idioma de despliegue en Primo VE.

    rule "Primo VE Display- Subject 650"
        when
            MARC is "650"."a"
        then
            set TEMP"1" to MARC."650"."a"
            set TEMP"3" to multilingual by "650" "Subject" "display"
            concatenate with delimiter (TEMP"1",TEMP"3","") 
            create pnx."display"."subject" with TEMP"1"
    end

    Consejos para Acciones

    Los siguientes consejos pueden ser útiles al crear acciones:

    • Puede emplear las Acciones de asignación para guardar información en las variables TEMP"i" (como TEMP"1") para un uso posterior en el procesamiento de la cláusula entonces. Después de haber guardado información en una variable TEMP"i", puede sobrescribir su contenido con Acciones de transformación, sobrescribir un campo MARC existente en el registro o añadir un campo MARC adicional al registro. Por ejemplo:

      # Saves the contents of subfield a to the TEMP"2" variable for later use.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"."a"

           then

                set TEMP"2" to MARC."502"."a"

                ...

      end

       
    • Al guardar información desde un registro MARC, debe especificar un subcampo o utilizar una de las Acciones de Subcampo.

      # Saves only MARC 502 subfield 'a' to Local Display Field 5 if subfield 'a' exists. If a record has multiple 502 fields, the local display field will be overwritten as each 502 field is processed.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"."a"

           then

                set pnx."display"."lds05" to MARC."502"."a"

      end

       

      ----------------------

       

      # Saves all MARC 502 subfields to Local Display Field 5 if it exists. The create action allows you to create multiple display fields for the MARC field. A new local display field is created in the record as each 502 field is processed.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"

           then

                create pnx."display"."lds05" with MARC."502" subfields

      end

       

      ----------------------

       

      # Fails - Attempts to save the MARC 502 subfield to Local Display Field 5 if it exists. This fails compilation since a subfield action was not included with the create statement.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"

           then

                create pnx."display"."lds05" with MARC."502"

      end

       

       
    • Si necesita guardar un valor de un subcampo específico, debe añadir una condición a la cláusulacuando que compruebe la existencia de ese subcampo. Para más detalles, véase Comprobaciones de Existencia. Por ejemplo:

      # Checks for the existence of a MARC 502 field that specifically has subfield a and writes only subfield a.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"."a"

           then

                create pnx."display"."lds05" with MARC."502"."a"

      end

       

      ----------------------

       

      # Checks for the existence of a MARC 502 field that has either subfield a or b and writes any existing subfield. When using the "has any" condition, make sure that you do not write any subfields that do not exist. This can be accomplished by adding a comparison check to see that a specific field is not empty.

       

      rule "Primo VE - Lds05"

           when

                MARC."502" has any "a,b"

           then

                create pnx."display"."lds05" with MARC."502" subfields

      end

       

      ----------------------

       

      # FAILS - Attempts to write a specific subfield for which its existence had not been checked.

       

      rule "Primo VE - Lds05"

           when

                MARC is "502"

           then

                create pnx."display"."lds05" with MARC."502"."a"

      end

       

      ----------------------

       

      # FAILS - Attempts to write a specific subfield for which its existence had not been checked. Subfield a was tested to see if it had a value, but its existence was not specifically checked.

       

      rule "Primo VE - Lds05" 

           when
                 MARC is "502" AND MARC."502"."a" match ".*"
           then
                 create pnx."display"."lds05" with MARC."502"."a"
      end

    Rutinas de Java

    La siguiente tabla enumera rutinas Java adicionales que típicamente se añaden como acciones para realizar una serie de acciones con un solo comando.

    Rutinas de Java
    Rutina Descripción

    normalize discovery lang (TEMP"<index>")

    Comprobar que el idioma es válido. Si tiene menos de tres letras o no está definido en la lista de idiomas ISO 639-2, se le asignará el valor "und" (no definido).

    Si añade idiomas a la tabla de códigos Códigos de idiomas personalizados, no debe utilizar esta rutina.

    kormarc remove nonfiling brackets MARC."{tag}" sourcetag "{fieldTag}" from TEMP"{i}"

    Relevante únicamente para formatos KORMARC.

    Si

    ("{fieldTag}" es igual a 630|740 Y MARC."{tag}" tiene el primer indicador 1)
    O
    ("{fieldTag}" es igual a 130|222|240|242|243|245|440|490|730|830 Y MARC."{tag}" tiene el segundo indicador 1)

    Entonces

    La rutina elimina los corchetes que rodean a TEMP"{i}", si existen.

    Ejemplo:

    kormarc remove nonfiling brackets MARC."630" sourcetag "630" from TEMP"1"

    Date1

    Posición 7-11 en el campo MARC 008. Por ejemplo:

    set TEMP"1" to MARC.control."008".Date1

    Date2

    Position 11-15 in the MARC 008 field. 

    Por ejemplo:

    set TEMP"1" to MARC.control."008".Date2

    Idioma

    Position 35-37 in the MARC 008 field. 

    Por ejemplo:

    set TEMP"1" to MARC.control."008".Language

    Título de despliegue de Prima

    Esta acción recupera el título desde el registro MARC y se puede utilizar junto con la rutina MARCRECORD. Por ejemplo:

    when
         MARCRECORD
    then
         set TEMP"1" to prima display title

    Para más detalles sobre el mapeo utlizado para el campo Título, consulte Mapeo de la sección de despliegue MARC.

    MARCRECORD

    Cuando se coloca en la cláusula cuando, esta rutina verifica la existencia de los campos de título MARC necesarios. Todo lo siguiente debe ser verdadero para satisfacer la condición:

    1. Verifique si el campo LDR existe en el MARC.

    2. Si es así, verifique si existe a en la posición 6 y b, i o s en la posición 7.

    3. Si son verdaderas, entonces los registros pertenecen a un diario y el título se toma del campo 130, subcampos a,d,f,k,l,m,n,o,p,r,s.

    4. Si no existe campo LDR, verifique el título en el campo 245, subcampos a,b,f,g,k,n,p,s.

    Para más información, vea la rutina título de despliegue de Prima.

    Insertar delimitadores de subcampo en los registros PNX

    Algunos campos en el registro PNX tienen múltiples valores que están delimitados por dos signos de dólar seguidos de un carácter o número específico (similar a los subcampos MARC). La siguiente tabla enumera los diversos tipos de delimitadores de subcampos utilizados en el registro PNX. 

    La siguiente tabla enumera los diversos tipos de delimitadores de subcampos utilizados en el registro PNX.

    Tipos de delimitadores de subcampos
    Delimitar Descripción

    C

    Una constante que se muestra antes del campo. Este delimitador solo se puede usar en la sección de Visualización para los siguientes campos: identificador, relación y descripción.

    La constante puede ser un código (minúsculas sin espacios o caracteres especiales, excepto los guiones bajos). El código se traduce a un nombre para el despliegue en Front End mediante la tabla de códigos Etiquetas constantes de despliegue (Menú de configuración > Descubrimiento > Configuración de despliegue > Etiquetas). Si el texto agregado no tiene traducción en la tabla de códigos, aparecerá como se introdujo en las reglas. Para obtener más detalles, véase Configurar etiquetas de despliegue para Primo VE.

    Q

    Contiene la parte de enlace del campo de visualización para un enlace de hipertexto mejorado. De lo contrario, el enlace se realiza en la parte de despliegue del campo de visualización. Para más información, véase Configurar definiciones de enlace de hipertexto para Primo VE.

     

    V

    Valor del campo (para distinguir entre el valor del campo y el texto de la visualización o la constante).

    Z

    Identificador de registro relacionado enlazado.

    Las siguientes reglas de normalización insertan una constante ISBN antes del valor del subcampo en el registro PNX. Además, el delimitador de subcampo $$C inserta un espacio, dos puntos y otro espacio entre la constante y el identificador del registro; por ejemplo,ISBN : 1-4963-0062-9). 
    rule "Primo VE - Identifier 020"
        when
            MARC is "020"."a"
        then
            set TEMP"1" to MARC "020"."a"
            add prefix (TEMP"1","$$CISBN$$V")
            create pnx."display"."identifier" with TEMP"1"
    end
     
    rule "Prima Display - ISBN 776"
        when
            MARC is "776"."z"
        then
            set TEMP"1" to MARC "776"."z"
            add prefix (TEMP"1","$$CISBN$$V")
            create pnx."display"."identifier" with TEMP"1"
    end
    Insertar HTML en registros PNX

    Insertar etiquetas HTML en registros PNX

    Primo VE le permite incluir etiquetas HTML en las reglas de normalización para que pueda aplicar estilos y formato HTML a los resultados de búsqueda. Se admiten las siguientes etiquetas HTML:
    Etiquetas HTML admitidas:
    span
    table
    tbody
    th
    tr
    td
    a
    s
    b
    br
    i
    u
    p
    img
    !--
    style
    Las siguientes reglas de normalización se aplican en negrita a la constante ISBN y se insertan antes del valor del subcampo en el registro PNX. Además, el delimitador de subcampo $$C inserta un espacio, dos puntos y otro espacio entre la constante y el identificador del registro; por ejemplo,ISBN : 1-4963-0062-9). 
    rule "Primo VE - Identifier 020"
        when
            MARC is "020"."a"
        then
            set TEMP"1" to MARC "020"."a"
            add prefix (TEMP"1","$$C<b>ISBN</b>$$V")
            create pnx."display"."identifier" with TEMP"1"
    end
     
    rule "Prima Display - ISBN 776"
        when
            MARC is "776"."z"
        then
            set TEMP"1" to MARC "776"."z"
            add prefix (TEMP"1","$$C<b>ISBN</b>$$V")
            create pnx."display"."identifier" with TEMP"1"
    end
    Insertar HTML en registros PNX

    Ejemplos de Reglas de Normalización

    Esta sección proporciona algunaos ejemplos básicos de reglas de normalización para Primo VE.

    Para encontrar ejemplos más avanzados, vea la página Ejemplos de Reglas de Normalización de Primo VE en la Red de Desarrolladores de Ex Libris.

    Ver las Reglas por Defecto

    Además de los ejemplos en las siguientes secciones y en la Red de Desarrolladores de Ex Libris, puede visualizar las reglas predefinidas para cada campo de Despliegue antes de realizar cambios en ellas.

    Para ver las reglas por defecto de un campo de Despliegue:
    1. En la página Mostrar campos (Menú de configuración > Descubrimiento > Mostrar configuración > Gestionar campos de despliegue), seleccione el campo Añadir despliegue de la lista desplegable Añadir campo para abrir la página Definir un campo de despliegue.

    2. Seleccione un campo de despliegue predefinido desde la lista desplegable Campo a editar.

    3. Dependiendo de sus formatos admitidos, edite la fila de la regla de normalización para el campo de despliegue (por ejemplo, Regla de normalización Marc21 para despliegue).

      PVE_DF_NormRule.png

      Regla de Normalización MARC Predefinida para el Campo de Edición
    4. Si ya ha modificado las reglas de un campo, puede copiar y guardar sus modificaciones de la regla por un lado, y luego seleccionar Restaurar valores por defecto para ver las reglas predefinidas.

    Ejemplo 1 - Excluir Subcampos Numerados

    Cuando un subcampo MARC 880 $$6 contiene la secuencia 520-<any_value>, la siguiente regla mostrará el contenido de todos los subcampos no numéricos en el campo de despliegue Descripción sin ordenarlos:

    rule "Primo VE - Description 880"

    when
    MARC is "880" AND
    MARC."880"."6" match "520-.*"
    then
    crear pnx."display"."description" con MARC."880" excluyendo los subcampos de valor numérico sin ordenar

    end

     
    Regla MARC 880 - Crear campo de despliegue Descripción

    Ejemplo 2 - Usar Concatenación

    Cuando un campo MARC 600 contiene cualquiera de los subcampos a-u, w-z y su segundo indicador no es 2, la regla siguiente desplegará la concatenación de las siguientes secuencias separadas por " -- " en el campo de despliegue Asunto:

    • Una secuencia que no tiene punto al final y contiene los valores de los subcampos a-u y w (que están separados por un espacio).

    • Una secuencia que no tiene punto al final o contiene los valores de los subcampos x-z (que están separados por "--").

    rule "Primo VE - Subject 600"

    when
    MARC."600" has any "a-u,w-z" AND NOT
    MARC."600".ind"2"  equals "2"
    then
    set TEMP"1" to MARC."600" subfields "a-u,w" delimited by " " remove substring using regex "\\.+$"
    set TEMP"2" to MARC."600" subfields "x-z" delimited by " -- " remove substring using regex "\\.+$"
    concatenate with delimiter (TEMP"1",TEMP"2"," -- ")
    create pnx."display"."subject" with TEMP"1"

    end

     
    Regla MARC 600 - Crear ccampo de despliegue Asunto

    Ejemplo 3 - Usar la Rutina de Normalización de Idioma

    Cuando existe un campo MARC 041 $$a, se aplican las siguientes acciones de la regla al campo para crear el campo de despliegue Idioma:

    1. El contenido de MARC 041 $a a se copia a Temp2, y todas las letras se convierten a minúsculas.

    2. Todos los códigos de idiomas de tres letras en Temp2 se almacenan como una lista en Temp1.

    3. Si los códigos de idioma almacenados en Temp1 son válidos, se crea el campo de despliegue Idioma.

    rule "Primo VE - Language 041 a"

    when
    MARC is "041"."a"
    then
    set TEMP"2" to MARC."041"."a"
    lower case (TEMP"2")
    return list using regex (TEMP"1",TEMP"2","[a-z]{3}")
    normalize discovery lang (TEMP"1")
    create pnx."display"."language" with list TEMP"1"

    end

     
    Regla MARC 041 a - Crear campo de despliegue Idioma

    Ejemplo 4 - Añadir Reglas de Búsqueda y Faceta

    La siguiente regla crea el campo local Lsr14 con los valores del subcampo a de MARC 700 (Entrada Añadida-Nombre Personal; $a-Nombre personal).

    Las reglas empleadas para los campos de faceta y de búsqueda locales se deben guardar en el campo de búsqueda local (por ejemplo, "search"."lsr14"), en lugar de en el campo de despliegue local (por ejemplo, "display"."lds14").

    rule "Primo VE Marc - Lsr14"

    when
    MARC is "700"."a"
    then
    create pnx."search"."lsr14" with MARC "700"."a"
    end
     
    Regla MARC 700 - Crear Campo de faceta y de búsqueda local

    Fuente MARC:

    700    1#$aMelville, Gert, $eeditor.

    700    1#$aRuta, Carlos, $eeditor.

    700    1#$aCarugati, Laura S, $eeditor.

    Resultado de Primo VE:

    PVE_LocalSearchFieldExampleOutput.png

    Ejemplo 5 - Creador de Dublin Core

    La sintaxis que se utiliza para las reglas de normalización DC es similar a la que se utiliza para otros campos de Despliegue y Local. Se recomienda utilizar las plantillas proporcionadas como guía para los campos. El siguiente ejemplo muestra las reglas de normalización por defecto utilizadas para mostrar el campo Creador:

    rule "prima_display creator- dcterms:creator"
                    when
                                    DCMI is "dcterms"."creator"
                    then
                                    create operational."prima_display"."creator" with DCMI."dcterms"."creator"
    end

    rule "prima_display creator - dc:creator"
                    when
                                    DCMI is "dc"."creator"
                    then
                                    create operational."prima_display"."creator" with DCMI."dc"."creator"
    end

     
    Ejemplo de Dublin Core - Reglas de creación por defecto
    • Was this article helpful?