Re: [ica-atom-users] New Taxonomy and Access Point

151 views
Skip to first unread message

Jesús García Crespo

unread,
Aug 12, 2010, 3:33:15 PM8/12/10
to Hernan Carvajal Briceño, qubit-dev
Hi Hernán

On Thu, Aug 12, 2010 at 4:55 AM, Hernán Carvajal <hernan.h...@gmail.com> wrote:
We have this problem: we need to include a new "name index" related to
the human rights violations victims, in our records.
This taxonmy isn't included on the ISADG Standard. Therefore, we have
to add this new index to the taxonomy list, so we can add a new access
point to the register.
What we achieved at this point is to show the new taxonomy on the list
(name: Victims).
This was done including a new register in the database, and adding a
code line into the following file: QubitTaxonomy.php

You should be careful trying to add new records directly in the database. Our taxonomy table (q_taxonomy) is hierarchical (see fields parent_id, lft and rgt). If you insert new taxonomies programatically, you'll see that lft/rgt fields are updated consequently and you can't do that by hand!

More details about this model here:

We use an ORM called Propel to interact with the database. In most cases, this will make things easyer. For example:

$taxonomy = new QubitTaxonomy;
$taxonomy->parentId = QubitTaxonomy::ROOT_ID;
$taxonomy->name = "Victims";
$taxonomy->save(); // This creates the record into the database!

Of course, this time I set these values directly but in ICA-AtoM code you can see that we get this data from user forms, dinamically.

The next step is to make the new Access Point available on the
entering or editing form of an archivistic description register, and
ensure the information is saved correctly in the database.
I know that by modifying the application code (PHP over the Symfony
Framework) we can achieve the main objective. For this reason, I'm
starting with the study of Symfony and this might take me some time.
So, my question is: has someone already faced this task and
succeeded?
If so, I would like to know what is the procedure to follow, and what
files we have to modify to achieve this objective, so we can to
shorter the implementation period of this new feature.

You'll find this task very easy because you can base your code on the existing access points. Furthermore, this shouldn't require any data model changes. Just copy the existing pattern for subjects or other access points. But it is important that you get used to MVC pattern (Symfony implementation is particular) and other important Symfony aspects: http://www.symfony-project.org/book/1_0/02-Exploring-Symfony-s-Code

Are your institution using ISAD? We implemented ISAD as a Symfony plugin: the directory is plugins/sfIsadPlugin.

These files will be important for your project:

- plugins/sfIsadPlugin/modules/sfIsadPlugin/templates/editSuccess.php (see fieldset#accessPointsArea)

The template. We use it for create new descriptions or edit existing ones. These lines of code will be rendered as HTML and sent to your browser. You can find here the existing access points: subjecs, places and names.

- plugins/sfIsadPlugin/modules/sfIsadPlugin/actions/editAction.class.php

The action. This is more complex, but don't get afraid, start reading on execute method. Please see that this class extends to a generic one placed in apps/qubit/modules/informationobject/actions/editAction.php. Actually, access points code is placed here. Look for "nameAccessPoints", for example. In addField method the data is captured and became accesible for the template. In processField method, we save the data.

Are you planning to add the ability to edit taxonomies? Actually, this is pretty straightforward.
We can guide you along in the process. And if you prefer it, we can continue this conversation in Spanish, it is my first language.

Let me know if you need more help, please!

Regards,

--
Jesús García Crespo

Hernán Carvajal

unread,
Aug 13, 2010, 10:37:28 AM8/13/10
to Qubit Toolkit Developers
Jola Jesús,

Primero que nada quiero darte las gracias por darte el tiempo de
responder a mi consulta.
Tu ayuda es muy valiosa y gracias a ella nos ahorraremos una buena
cantidad de tiempo en la implementación de las nuevas características
para el Ica-Atom, que nuestro museo necesita con urgencia.

En cuanto a tus observaciones:

> You should be careful trying to add new records directly in the database.
> Our taxonomy table (q_taxonomy) is hierarchical (see fields parent_id, lft
> and rgt). If you insert new taxonomies programatically, you'll see that
> lft/rgt fields are updated consequently and you can't do that by hand!

Estoy de acuerdo contigo, es recomendable utilizar los procedimientos
adecuados, minimizando la posibilidad de errores.
De todas formas estudié el modelo de relaciones de la base de datos, y
hasta ahora no he tenido problemas con los cambios realizados.
Los campos lft/rgt fueron actualizados consecuentemente a los cambios.
Tengo en observación en el comportamiento de la aplicación, para
detectar y evitar posibles errores.

You'll find this task very easy because you can base your code on the
existing access points. Furthermore, this shouldn't require any data
model
changes. Just copy the existing pattern for subjects or other access
points.
But it is important that you get used to MVC pattern (Symfony
implementation
is particular) and other important Symfony aspects:
http://www.symfony-project.org/book/1_0/02-Exploring-Symfony-s-Code

Estoy en el estudio. No conocía Symfony, y le veo una tremenda
utilidad y potencial.

> Are your institution using ISAD? We implemented ISAD as a Symfony plugin:
> the directory is plugins/sfIsadPlugin.

Si, nuestra institución está utilizando el estándar ISADG del ICA.
Trabajo en equipo con una excelente profesional bibliotecaria, Judith
Riquelme, quien eligió Ica_Atom justamente por el estándar ISADG, por
ser una iniciativa del ICA y por lo bien que se adapta el software a
las necesidades y objetivos del museo. Esto después de haber hecho una
comparación con otros sistemas de software. No obstante, como ves,
tendremos que salirnos del estándar para adaptarlo a nuestras
necesidades particulares de información.

> These files will be important for your project:
>
> - plugins/sfIsadPlugin/modules/sfIsadPlugin/templates/editSuccess.php (see
> fieldset#accessPointsArea)
>
> The template. We use it for create new descriptions or edit existing ones.
> These lines of code will be rendered as HTML and sent to your browser. You
> can find here the existing access points: subjecs, places and names.
>
> - plugins/sfIsadPlugin/modules/sfIsadPlugin/actions/editAction.class.php
>
> The action. This is more complex, but don't get afraid, start reading on
> execute method. Please see that this class extends to a generic one placed
> in apps/qubit/modules/informationobject/actions/editAction.php. Actually,
> access points code is placed here. Look for "nameAccessPoints", for example.
> In addField method the data is captured and became accesible for the
> template. In processField method, we save the data.

Esta parte de tu respuesta me ha ayudado bastante. Estoy revisando el
código antes de hacer los cambios necesarios.
Espero que todo resulte bien. Si así fuera, entraríamos en producción
en un breve plazo. Tu ayuda, y la de todos en esta lista, es una buena
contribución para que así sea.
Estoy gratamente impresionado con la sinergia de este grupo. Pienso
que no nos equivocamos al elegir Atom.

> Are you planning to add the ability to edit taxonomies? Actually, this is
> pretty straightforward.
> We can guide you along in the process. And if you prefer it, we can continue
> this conversation in Spanish, it is my first language.
Por ahora lo único que necesitamos es traducir los nombres de las
taxonomías al español. Gracias a que Symfony considera nativamente la
internacionalización como un campo en la base de datos, esta tarea ha
sido muy fácil.
Si en el futuro necesitamos algo más elaborado, contaremos con tu
ayuda.

Finalmente, espero que a nuestros amigos de habla inglesa no les
importe traducir un poco del español al inglés. Pero si es necesario
puedo escribir en inglés sin ningún problema, haciendo mi mejor
esfuerzo.

> Let me know if you need more help, please!
Lo más seguro es que voy a necesitarla!!


Muchas gracias nuevamente, estamos en contacto.

Saludos cordiales,

Hernán Carvajal B.





On 12 ago, 15:33, Jesús García Crespo <cor...@sevein.com> wrote:
> Hi Hernán
>
> On Thu, Aug 12, 2010 at 4:55 AM, Hernán Carvajal <hernan.hcarva...@gmail.com

Jesús García Crespo

unread,
Aug 13, 2010, 3:37:07 PM8/13/10
to qubi...@googlegroups.com
Hola Hernán,

On Fri, Aug 13, 2010 at 4:37 PM, Hernán Carvajal <hernan.h...@gmail.com> wrote:
Si en el futuro necesitamos algo más elaborado, contaremos con tu
ayuda.

Vale, nosotros estaremos encantados de echarte una mano.
 
Finalmente, espero que a nuestros amigos de habla inglesa no les
importe traducir un poco del español al inglés. Pero si es necesario
puedo escribir en inglés sin ningún problema, haciendo mi mejor
esfuerzo.

No te preocupes, hay un grupo de usuarios hispanohablantes considerablemente grande. Es más, cuando tenga un poco de tiempo me gustaría impulsar la traducción de la aplicación y la documentación.

Respecto a la conversación que tuvimos ayer, me gustaría añadir que tengas en cuenta que ICA-AtoM sigue en desarrollo. Tenemos programadas un montón de nuevas funcionalidades para la próxima versión (permalinks, informes, EAC, SKOS, ...), cuyo lanzamiento se ha programado en octubre. Por lo tanto, ten en cuenta que tus modificaciones podrían necesitar algo de trabajo adicional para ser integradas en las próximas versiones. Por ejemplo, habría que comprobar que los scripts de migración no están ignorando tus puntos de acceso personalizados, aunque me atrevo a decir que no habrá problemas con este punto. Quizás estaría bien que trabajaras con tu propio sistema de control de versiones (Subversion es el que usamos nosotros), para mantener un control de los cambios que haces. Y quien sabe, puede que alguna de las modificaciones que hagas sean de interés general y puedas compartirlas con nosotros para incluirlas en nuestra rama de desarrollo.

Un saludo,

--
Jesús García Crespo,
Software Engineer, Artefactual Systems Inc.
http://www.artefactual.com | +1.604.527.2056

Hernán Carvajal

unread,
Aug 20, 2010, 12:02:17 PM8/20/10
to Qubit Toolkit Developers, Judith Riquelme Ríos
Hola Jesús,

Gusto de saludarte. Demoré un poco pero aquí estoy nuevamente.

Prosigo con lo anterior:

> No te preocupes, hay un grupo de usuarios hispanohablantes considerablemente
> grande. Es más, cuando tenga un poco de tiempo me gustaría impulsar la
> traducción de la aplicación y la documentación.

Cuenta con mi apoyo y colaboración.

> Respecto a la conversación que tuvimos ayer, me gustaría añadir que tengas
> en cuenta que ICA-AtoM sigue en desarrollo. Tenemos programadas un montón de
> nuevas funcionalidades para la próxima versión (permalinks, informes, EAC,
> SKOS, ...), cuyo lanzamiento se ha programado en octubre. Por lo tanto, ten
> en cuenta que tus modificaciones podrían necesitar algo de trabajo adicional
> para ser integradas en las próximas versiones. Por ejemplo, habría que
> comprobar que los scripts de migración no están ignorando tus puntos de
> acceso personalizados, aunque me atrevo a decir que no habrá problemas con
> este punto. Quizás estaría bien que trabajaras con tu propio sistema de
> control de versiones (Subversion es el que usamos nosotros), para mantener
> un control de los cambios que haces. Y quien sabe, puede que alguna de las
> modificaciones que hagas sean de interés general y puedas compartirlas con
> nosotros para incluirlas en nuestra rama de desarrollo.

Me parece excelente lo que me cuentas.
Respecto a nuestras adiciones personalizadas, estamos dispuestos a
asumir ese trabajo extra en caso de migrar. Estamos trabajando de
lleno en el sistema y nos interesa sacarle el máximo provecho.
Voy a tomar tu sugerencia de utilizar un sistema como Subversion.En
todo caso, aún me falta experiencia con el sistema para hacer aportes
con mejoras que se reflejen en código fuente nuevo. Sin embargo es lo
ideal para mi, y trabajaré en esa dirección. Espero algún dia (no muy
lejano) hacer aportes al grupo de desarrolladores.

Ahora respecto a nuestro trabajo de estos dias, donde la tarea era
agregar una nueva Taxonomía para los Puntos de Acceso al formulario de
ingreso/edición, gracias a tu guía pude realizarlo exitosamente.
Modifiqué varios archivos, documentando todo. En este momento ya estoy
en condiciones de agregar más Taxonomías y Puntos de Acceso, si fuera
necesario. Hasta ahora funciona correctamente, estamos en etapa de
pruebas y evaluación. Todavía faltan algunos detalles, como revisar si
es necesario hacer alguna modificación respecto a los links a Objetos
Digitales y al Almacenamiento Físico. Es la tarea que sigue.

Sin embargo hay otra más importante aún, y es aquí donde quiero
solicitar tu ayuda, me falta que funcione el sistema de indexado para
el motor de búsquedas.

He agregado las siguientes líenas de código al archivo ../apps/qubit/
lib/SearchIndex.class.php en la línea 339 aproximadamante:

// VICTIM
$placeField = Zend_Search_Lucene_Field::Unstored('victim',
$informationObject->getAccessPointsString(QubitTaxonomy::VICTIM_ID,
array('culture' => $language)), $encoding);
//boost the hit relevance for the place field
$victimField->boost = 4;
$doc->addField($victimField);

Más cuando se habilita este código, al ingresar un nuevo registro el
sistema arroja el siguiente error en el explorador:

Strict Standards: Creating default object from empty value in /var/www/
html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on line 342

Catchable fatal error: Argument 1 passed to
Zend_Search_Lucene_Document::addField() must be an instance of
Zend_Search_Lucene_Field, instance of stdClass given, called in /var/
www/html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on line
343 and defined in /var/www/html/icaatom-1.0.9/plugins/sfLucenePlugin/
lib/vendor/Zend/Search/Lucene/Document.php on line 75

Lo mismo ocurre al ejecutar el comando de reindexado: ./symfony
search:populate QubitSearch

Arroja el mismo error:

[root@localhost icaatom-1.0.9]# ./symfony search:populate QubitSearch
QubitSearch >> Populating index...
QubitSearch >> Index erased.
QubitSearch >> "" inserted (0.04s)
QubitSearch >> hcarvajal inserted (0.09s)
QubitSearch >> Hernan Carvajal Briceño inserted (0.15s)
QubitSearch >> Judith Riquelme Rios inserted (0.2s)
QubitSearch >> "" inserted (0.42s)
PHP Strict Standards: Creating default object from empty value in /
var/www/html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on
line 342

Strict Standards: Creating default object from empty value in /var/www/
html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on line 342
PHP Catchable fatal error: Argument 1 passed to
Zend_Search_Lucene_Document::addField() must be an instance of
Zend_Search_Lucene_Field, instance of stdClass given, called in /var/
www/html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on line
343 and defined in /var/www/html/icaatom-1.0.9/plugins/sfLucenePlugin/
lib/vendor/Zend/Search/Lucene/Document.php on line 75

Catchable fatal error: Argument 1 passed to
Zend_Search_Lucene_Document::addField() must be an instance of
Zend_Search_Lucene_Field, instance of stdClass given, called in /var/
www/html/icaatom-1.0.9/apps/qubit/lib/SearchIndex.class.php on line
343 and defined in /var/www/html/icaatom-1.0.9/plugins/sfLucenePlugin/
lib/vendor/Zend/Search/Lucene/Document.php on line 75

Al deshabilitar este código el ingreso de nuevos registro se realiza
de forma normal, y el sistema de búsqueda y reindexado funciona bien.
Tienes alguna idea de dónde está el problema? Donde debo enfocar la
atención?

Mención aparte, el motor de Búsquedas le otorga un gran valor al
sistema, permitiendo una recuperación de registros simple y eficiente.
Esta característica nos satisface bastante y es muy importante que
funcione con los cambios que hicimos.

Gracias nuevamente por tu ayuda. Espero puedas darme algunas luces
sobre este inconveniente.

Saludos,

Hernán Carvajal B.

On Aug 13, 3:37 pm, Jesús García Crespo <je...@artefactual.com> wrote:
> Hola Hernán,
>
> On Fri, Aug 13, 2010 at 4:37 PM, Hernán Carvajal <hernan.hcarva...@gmail.com

Jesús García Crespo

unread,
Aug 20, 2010, 2:13:33 PM8/20/10
to qubi...@googlegroups.com, Judith Riquelme Ríos, hernan.h...@gmail.com
Hola Hernán,

2010/8/20 Hernán Carvajal <hernan.h...@gmail.com> 
   // VICTIM
   $placeField = Zend_Search_Lucene_Field::Unstored('victim',
$informationObject->getAccessPointsString(QubitTaxonomy::VICTIM_ID,
array('culture' => $language)), $encoding);
   //boost the hit relevance for the place field
   $victimField->boost = 4;
   $doc->addField($victimField);

Hasta donde yo puedo ver en el código, parece que al método addField() le estás pasando una variable que no existe ($victimField). Más arriba veo que usas $placeField, eso parece un descuido, :-).

 
Mención aparte, el motor de Búsquedas le otorga un gran valor al
sistema, permitiendo una recuperación de registros simple y eficiente.
Esta característica nos satisface bastante y es muy importante que
funcione con los cambios que hicimos.

Lo cierto es que no estamos muy contentos con Zend Lucene. La generación de índices es muy lenta y tenemos algún que otro problema, pero todavía no hemos tenido tiempo para estudiar detenidamente otras alternativas. Y no creo que para la 1.1 lo tengamos listo, así que puedes estar tranquilo porque seguramente sigamos usando Zend Lucene durante los próximos meses. Quizás, cuando tengas un par de decenas de miles de registros, quieras echarnos una mano en esta tarea. Solr parece una buena solución.

Ánimo con eso, vas por buen camino.

Hernán Carvajal

unread,
Aug 20, 2010, 2:41:43 PM8/20/10
to Qubit Toolkit Developers, Judith Riquelme Ríos
Hola Jesús,

> Hasta donde yo puedo ver en el código, parece que al método addField() le
> estás pasando una variable que no existe ($victimField). Más arriba veo que
> usas $placeField, eso parece un descuido, :-).

Efectivamente fué una desprolijidad de mi parte :-S
Espero no se repita en público :-D
Esa líena era el pequeño "detalle" que causaba el problema. Ahora
funcionó bien el reindexado:

[root@localhost icaatom-1.0.9]# ./symfony search:populate QubitSearch
QubitSearch >> Populating index...
QubitSearch >> Index erased.
QubitSearch >> "" inserted (0.05s)
QubitSearch >> hcarvajal inserted (0.11s)
QubitSearch >> Hernan Carvajal Briceño inserted (0.17s)
QubitSearch >> Judith Riquelme Rios inserted (0.23s)
QubitSearch >> "" inserted (0.45s)
QubitSearch >> Prueba de archivo 1 inserted (0.63s)
QubitSearch >> Index populated in 0.63 seconds.


Surgieron nuevos problemas pero estoy revisando. Está entretenido el
trabajo con el Ica-Atom.

> Lo cierto es que no estamos muy contentos con Zend Lucene. La generación de
> índices es muy lenta y tenemos algún que otro problema, pero todavía no
> hemos tenido tiempo para estudiar detenidamente otras alternativas. Y no
> creo que para la 1.1 lo tengamos listo, así que puedes estar tranquilo
> porque seguramente sigamos usando Zend Lucene durante los próximos meses.
> Quizás, cuando tengas un par de decenas de miles de registros, quieras
> echarnos una mano en esta tarea. Solr parece una buena solución.

Nosotros aún no hacemos una subida masiva de registros al sistema.
Sin embargo no creo que lleguemos a las decenas de miles en los
próximos años.
De todas maneras, suerte con las mejoras.


Saludos,

Hernán Carvajal B.


On Aug 20, 2:13 pm, Jesús García Crespo <je...@artefactual.com> wrote:
> Hola Hernán,
>
> 2010/8/20 Hernán Carvajal <hernan.hcarva...@gmail.com>
Reply all
Reply to author
Forward
0 new messages