2011-01-05 31 views
5

Podczas projektowania interfejsu XForm do bazy danych XML (przy użyciu eXist i XSLTForms), chciałbym dołączyć kontrolkę wejściową dla elementu opcjonalnego. Rekordy danych XML już istnieją, a niektóre zawierają element opcjonalny, a inne nie. Aby zaktualizować rekord, używam istniejącego rekordu XML jako instancji modelu. Problem polega na tym, że formant formularza nie jest wyświetlany, gdy element opcjonalny nie jest obecny, co jest logiczne, ale stanowi problem, gdy użytkownik chce dodać dane do opcjonalnego elementu.Umożliwianie formantowi XForm dla opcjonalnych elementów XML

Aby być bardziej wyraźne, oto przykład zapis danych, data.xml:

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

z RNC schematu:

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

XForms model:

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

i sterowanie:

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

Problem polega na tym, że kontrolka wprowadzania "Uwagi" po prostu nie jest wyświetlana.

Oczywistym rozwiązaniem jest dodanie przycisku wyzwalacza, aby umożliwić użytkownikowi wstawienie elementu, jeśli jest to potrzebne, ale lepiej jest po prostu wyświetlić sterowanie wejściowe i być puste.

Moje pytanie brzmi: czy istnieje subtelna kombinacja mniej znanych atrybutów/binds/multiple instances/xpath wyrażenia, które spowodują, że kontrola będzie zawsze wyświetlana?

Odpowiedz

2

Szczerze mówiąc, XForms nie radzi sobie z tą opcjonalną sytuacją bardzo dobrze. Zobacz this related discussion na blogu Micah. Niezbyt satysfakcjonujące obejście polega na dodaniu pustych elementów dla tych opcjonalnych elementów po pobraniu danych z eXist i usunięciu ich przed zapisaniem danych z powrotem do eXist.

+1

Dzięki za tę sugestię. Odkąd odkryłem, że dodawanie _new_ elementów z insertem nie jest łatwe. – Cam

+1

Tak, 'xforms: insert' jest dość skomplikowaną konstrukcją, szczególnie ze względu na wszystkie atrybuty, których można użyć na tym elemencie. Ale są tu 2-3 główne przypadki użycia, każde z nich wymaga różnych atrybutów, a gdy już się to stanie, stają się prostsze. Możesz znaleźć rodzaj samouczka dla 'xforms: insert' na: http://wiki.orbeon.com/forms/how-to/repeat-insert-position – avernet

2

Ta sytuacja została już omówiona przez Grupę W3C Forms: http://www.w3.org/2010/07/07-forms-minutes.html Używanie nowej MIP może pomóc w implementacji tego w XSLTForms.

-Alain

+0

Alain, wielkie dzięki za XSLTForms! Fantastyczny zasób. I dziękuję za wskazówkę, że możliwe jest rozwiązanie tego problemu w przyszłości. – Cam

Powiązane problemy