2011-01-05 15 views
5

Al diseñar una interfaz XForm para una base de datos XML (utilizando eXist y XSLTForms), me gustaría incluir un control de entrada para un elemento opcional. Los registros de datos XML ya existen y mientras que algunos contienen el elemento opcional, otros no. Para actualizar un registro, estoy usando el registro XML existente como la instancia del modelo. El problema es que el control de formulario no se muestra cuando el elemento opcional no está presente, lo cual es lógico, pero presenta un problema cuando un usuario desea agregar datos al elemento opcional.Permitir controles XForm para elementos XML opcionales

Para ser más explícitos, he aquí un ejemplo de registro de datos, data.xml:

<a> 
    <b>content</b> 
</a> 

con esquema RNC:

start = 
    element a { 
    element b { text }, 
    element notes { text }? 
    } 

XForms modelo:

<xf:model> 
    <xf:instance xmlns="" src="data.xml"/> 
    <xf:submission id="save" method="post" action="update.xq" /> 
</xf:model> 

y control:

<xf:input ref="https://stackoverflow.com/a/notes"> 
    <xf:label>Notes (optional): </xf:label> 
</xf:input> 

El problema es que el control de entrada 'Notas' simplemente no se muestra.

Una solución obvia es agregar un botón de activación para permitirle al usuario insertar el elemento si es necesario, pero es preferible que solo aparezca el control de entrada y que esté vacío.

Mi pregunta es: ¿Existe alguna combinación sutil de atributos/binds/multiple instances/expresiones xpath menos conocidas que harán que siempre se muestre el control?

Respuesta

2

Para ser sincero, XForms no maneja esta situación de elemento opcional muy bien. Ver this related discussion en el blog de Micah. Una solución no tan satisfactoria es agregar elementos vacíos para esos elementos opcionales después de recuperar los datos de eXist, y eliminarlos antes de guardar los datos nuevamente en eXist.

+1

Gracias por esta sugerencia. Desde entonces, descubrí que agregar _nuevos elementos con una inserción no es fácil. – Cam

+1

Sí, el 'xforms: insert' es una construcción bastante complicada, especialmente debido a todos los atributos que puede usar en ese elemento. Pero hay dos o tres casos de uso principales para cada uno, cada uno de los cuales requiere diferentes atributos, y una vez que entiendes esas cosas se vuelven más simples. Puede encontrar un tipo de tutorial para 'xforms: insert' en: http://wiki.orbeon.com/forms/how-to/repeat-insert-position – avernet

2

Esta situación ya ha sido discutida por el grupo de formularios del W3C: http://www.w3.org/2010/07/07-forms-minutes.html El uso de MIP nuevo podría ayudar a implementar esto en XSLTForms.

-Alain

+0

Alain, ¡muchas gracias por XSLTForms! Un recurso fantástico. Y gracias por este indicador a una posible forma futura de resolver esto. – Cam

Cuestiones relacionadas