es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

División de archivo XML en módulo de transformación personalizado de MarkLogic

Según la documentación sobre la Transformación Personalizada durante la ingestión de mlcp, la función en el módulo puede generar cero, uno o muchos documentos de salida. ¿Cómo podría dividirse el siguiente documento por la etiqueta “persona”? ¿Sería también posible obtener el atributo CREATE_DATE? (las opciones para mlcp como -input_file_type "aggregates" y -aggregate_record_element persona no son aceptables, ya que el atributo CREATE_DATE de la etiqueta “people” no estará disponible en el contenido)

<people CREATE_DATE="07/01/2020">
  <person>
    <first>George</first>
    <last>Washington</last>
  </person>
  <person>
    <first>Betsy</first>
    <last>Ross</last>
  </person>
</people>
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para dividir el documento por la etiqueta “person” y obtener el atributo CREATE_DATE de la etiqueta “people”, se puede utilizar un módulo de transformación personalizado. El módulo puede extraer el atributo CREATE_DATE y pasarlo como parámetro a la función que divide el documento por la etiqueta “person”. El siguiente ejemplo XQuery demuestra cómo se puede lograr esto:

    “`xquery version “1.0-ml”;

    module namespace custom = “http://example.com/custom”;

    declare function custom:transform(
    $content as document-node(),
    $params as map:map
    ) as document-node()*
    {
    let $created := $content/people/@CREATE_DATE
    return custom:split-by-person($content, $created)
    };

    declare function custom:split-by-person(
    $content as document-node(),
    $created as xs:string
    ) as document-node()*
    {
    let $persons := $content/people/person
    for $person in $persons
    return document {
    element person {
    element first { $person/first/text() },
    element last { $person/last/text() },
    attribute CREATE_DATE { $created }
    }
    }
    }


    Este módulo define una función custom:transform que extrae el atributo CREATE_DATE de la etiqueta people del documento de entrada y lo pasa como parámetro a la función custom:split-by-person que divide el documento por la etiqueta person e incluye el atributo CREATE_DATE en cada documento de salida. Para utilizar este módulo de transformación personalizado durante la ingestión de mlcp, se pueden especificar las opciones -transform_module y -transform_namespace de la siguiente manera: ```bin/mlcp.sh import \ -username user \ -password password \ -host hostname \ -port 8000 \ -database database \ -input_file_path input.xml \ -output_uri_replace input.xml,'','.xml' \ -mode local \ -transform_module /path/to/custom.xqy \ -transform_namespace "http://example.com/custom"

    El archivo input.xml se dividirá en múltiples documentos de salida, uno por cada etiqueta person, y cada documento de salida contendrá el atributo CREATE_DATE extraído.

Comments are closed.