Re: [Xsltforms-support] A newbie seeking some guidance...
Brought to you by:
alain-couthures
From: Josselin M. <mor...@gm...> - 2021-02-11 21:48:12
|
Hi Ralph, For the xf: and non-xf: elements, it depends how and where you declare the xforms namespace. With your form you declared the namespace with the prefix xf: on the html tag : xmlns:xf="http://www.w3.org/2002/xforms", so, as you noticed, you need to use this xf prefix with the xforms elements. Best, Josselin Envoyé de mon iPhone > Le 11 févr. 2021 à 21:31, Ralph Corrigan <ra...@ra...> a écrit : > > > Thanks Josselin, clear explanations as ever! > I tried those changes but initially didn't get anywhere. Certainly the context was wrong in the first <repeat>, but it turns out that - in my instance at least - I needed to mark the <insert> as <xf:insert> - it then worked just as expected, so (sorry, I didn't do the verbose although your explanation was extremely helpful): > > <xf:trigger> > <xf:label>New role</xf:label> > <xf:insert nodeset="instance('template')/listPerson/person/occupation" at="index('repeat-occ')" > position="after" ev:event="DOMActivate" /> > </xf:trigger> > I'm a bit confused by this as the examples in the implementation file have a mix of xf: and non-xf: and work fine, but my xml seems to need every element marked 'xf:'. > > Anyway, many thanks - and hopefully I'll leave you in peace for a while now! > > Ralph > > > >> On 11/02/2021 18:52, Josselin Morvan wrote: >> >> Hi Ralph, >> >> As you specified a xf:group/@ref, everything inside this group starts from that point (you keep the context) >> >> You can try this - the node you want to repeat is your context node ('.' With Xpath ) : >> <xf:group id="pers" ref="instance('template')/listPerson/person"> >> <label>So this bit now works!</label> >> <xf:repeat id="repeat" nodeset="."> >> [...] >> </xf:repeat> >> [...] >> </xf:group> >> Or - you change your xf:group/@ref for the parent node listPerson, and you repeat the child node person : >> <xf:group id="pers" ref="instance('template')/listPerson"> >> <label>So this bit now works!</label> >> <xf:repeat id="repeat" nodeset="person"> >> >> [...] >> </xf:repeat> >> [...] >> </xf:group> >> Same idea for the repeat of occupation, as you already start from the node person, you just need to write : @nodeset='occupation' >> >> For the repeat, I think, at the beginning, you should be verbose to understand how it works : >> >> <insert context="." >> origin="instance('template')/listPerson/person/occupation" >> nodeset="occupation" >> at="index('repeat-occ')" >> position="after" >> ev:event="DOMActivate" /> >> To simplify, @context = your evaluation context (the node person in that case), @origin = the node you want to copy (you can take it from another instance), @nodeset = your target for the copy (here your will copy a new occupation node after (@position=after) the node occupation (@nodeset) with position()=index('repeat-occ') (@at='index('repeat-occ')') ) >> >> Let's try and keep us informed. >> >> Best, >> Josselin. >> >>> Le 11 févr. 2021 à 18:54, Ralph Corrigan <ra...@ra...> a écrit : >>> >>> Hi again >>> I wasn't wrong. >>> >>> I'm sure that this is going to be Xpath errors in the <trigger> but <repeat> is not happening. I've stripped back the model (and added a couple of other bits) and working round different Xpath permutations for the groups/elements has given me some confidence in that. But the triggers, while rendering fine, don't do anything. >>> >>> As always, any help gratefully appreciated >>> >>> Ralph >>> >>> >>> <?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?> >>> <?xsltforms-options debug="yes"?> >>> <html xmlns="http://www.w3.org/1999/xhtml" >>> xmlns:xf="http://www.w3.org/2002/xforms" >>> xmlns:ev="http://www.w3.org/2001/xml-events" >>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >>> >>> <head> >>> <title> New Person</title> >>> <xf:model> >>> >>> <xf:instance id="template"> >>> <items xmlns=""> >>> <listPerson> >>> <person xml:id="Unique name" sex="Sex"> >>> <persName><forename>Forename</forename><surname>Surname</surname></persName> >>> <occupation><rolename></rolename></occupation> >>> </person> >>> </listPerson> >>> </items> >>> </xf:instance> >>> <xf:submission id="s01" method="post" show="new" replace="all" action="xsltforms/txs.php?exec=beautify.txs"> >>> <xf:message level="modeless" ev:event="xforms-submit-error">Submit error.</xf:message> >>> </xf:submission> >>> </xf:model> >>> >>> </head> >>> <body> >>> <xf:group id="pers" ref="instance('template')/listPerson/person"> >>> <label>So this bit now works!</label> >>> <xf:repeat id="repeat" nodeset="instance('template')/listPerson/person"> >>> <xf:input ref="@xml:id"><xf:label>Unique name</xf:label></xf:input> >>> <xf:input ref="persName/forename"><xf:label>Forename</xf:label></xf:input> >>> <xf:input ref="persName/surname"><xf:label>Surname</xf:label></xf:input> >>> <xf:select1 ref="@sex" appearance="minimal"> >>> <xf:label>Sex</xf:label> >>> <xf:item> >>> <xf:label>Male</xf:label> >>> <xf:value>1</xf:value> >>> </xf:item> >>> <xf:item> >>> <xf:label>Female</xf:label> >>> <xf:value>2</xf:value> >>> </xf:item> >>> <xf:item> >>> <xf:label>Unknown</xf:label> >>> <xf:value>0</xf:value> >>> </xf:item> >>> </xf:select1> >>> >>> <xf:group id="occupation"> >>> <xf:repeat id="repeat-occ" nodeset="instance('template')/listPerson/person/occupation"> >>> <xf:input ref="rolename"><xf:label>Role</xf:label></xf:input> >>> </xf:repeat> >>> <xf:trigger> >>> <xf:label>New role</xf:label> >>> <insert nodeset="instance('template')/listPerson/person/occupation" at="index('repeat-occ')" >>> position="after" ev:event="DOMActivate" /> >>> </xf:trigger> >>> </xf:group> >>> >>> </xf:repeat> >>> <xf:trigger> >>> <xf:label>New</xf:label> >>> <insert nodeset="instance('template')/listPerson/person" at="index('repeat')" >>> position="after" ev:event="DOMActivate" /> >>> </xf:trigger> >>> </xf:group> >>> >>> <xf:submit submission="s01"> >>> <xf:label>View</xf:label> >>> </xf:submit> >>> </body> >>> </html> >>> >>> >>> >>> >>> >>> >>> >>> On 10/02/2021 21:40, Ralph Corrigan wrote: >>> >>> Many thanks Josselin, I stupidly didn't realise that the whole Xpath was required. >>> >>> That's rendering fine now, so on to the <repeat> sections. I fear I may be in touch again, though... >>> >>> Thanks again >>> Ralph >>> >>> >>> >>> On 10/02/2021 20:09, Josselin Morvan wrote: >>> >>> Hi Ralph, >>> >>> I don't know if your are trying to work with the first instance (we cannot access to the listPerson.xml file) or your #template instance, but I suspect an error with your Xpath. >>> >>> If your listPerson is a XML-TEI file, your xml-tree should be something like : >>> <TEI xmlns="http://www.tei-c.org/ns/1.0"> >>> <teiHeader/> >>> <text> >>> <body> >>> <listPerson> >>> <person> >>> <!-- person 1 --> >>> <persName> >>> <surname></surname> >>> <forename></forename> >>> </persName> >>> </person> >>> </listPerson> >>> </body> >>> </text> >>> </TEI> >>> Then if you want to target the surname and forename tags, your Xpath should be something like /TEI/text/body/listPerson/person/persName/surname and /TEI/text/body/listPerson/person/persName/forename. You can use xf:group/@ref to shorten your link : >>> <xf:group ref="/TEI/text/body/listPerson/person/persName"> >>> <label>why does this not work?</label> >>> <xf:input ref="forename"><label>Forename</label></xf:input> >>> <xf:input ref="surname"><label>Surname></label></xf:input> >>> </xf:group> >>> >>> If your are trying to work with your #template instance, your Xpath is also wrong and as it is not your first instance, you need to specify it in the @ref : >>> >>> <xf:group ref="instance('template')/TEI/text/body/listPerson/person/persName"> >>> <label>why does this not work?</label> >>> <xf:input ref="forename"><label>Forename</label></xf:input> >>> <xf:input ref="surname"><label>Surname></label></xf:input> >>> </xf:group> >>> >>> I think you'll also have to correct your xpath with your trigger to insert a new person. >>> >>> Finally, if you plan to manage more than one person at a time, you should take a look at the xf:repeat element. (https://www.w3.org/TR/xforms11/#ui-repeat) >>> >>> If you declared a namespace (with listPerson.xml ?) it can also be the origin of your issue as some browsers don't handle the namespace declarations very well, but first let's try with corrected Xpath and keep us informed! >>> >>> >>> Best, >>> Josselin. >>> >>> Le 10 févr. 2021 à 19:04, Ralph Corrigan <ra...@ra...> a écrit : >>> >>> Hi, >>> Apologies for this as I'm sure that I'm missing something extremely basic, but I'm having problems with implementing Xsltforms running via an Apache server on a Synology NAS (for now). I'm totally new to Xforms (in any implementation) but have been working with TEI xml and fetchXML for a couple of years, so I'm comfortable with that side of things. >>> >>> All of the test forms downloaded with the implementation work fine - they have no problems at all. However, apparently simple changes cause the form to either not render at all (without error message) or with key parts missing. >>> >>> In the following example, I've changed some bits of Steve Pemberton's 'todo.xml'. This form is a partial success in that the form does render, and the s01 submission demonstrates that the src xml has been found and read. However, the input fields (and I've deliberately kept this short after the full model failed) do not appear (see image). There are no errors in the trace log and the profiler recognises that the 2 input fields exist. They just aren't being displayed. >>> >>> This problem is happening on all the examples I modify - I would understand it (more) if the triggers failed as I'm new to this, but failing to even render input/label seems really odd (and suggests that I'm making a very basic error)! >>> >>> Any help gratefully received >>> >>> Ralph >>> >>> >>> <?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?> >>> <?xsltforms-options debug="yes"?> >>> <html xmlns="http://www.w3.org/1999/xhtml" >>> xmlns:xf="http://www.w3.org/2002/xforms" >>> xmlns:ev="http://www.w3.org/2001/xml-events" >>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >>> <head> >>> <title> New Person</title> >>> <xf:model> >>> <xf:instance src="listPerson.xml"/> >>> <xf:instance id="template"> >>> <items xmlns=""> >>> <TEI><text><body><listPerson> >>> <person> >>> <persName><forename>Forename</forename><surname>Surname</surname></persName> >>> <occupation><rolename></rolename></occupation> >>> </person> >>> </listPerson></body></text></TEI> >>> </items> >>> </xf:instance> >>> <xf:submission id="save" method="put" action="listperson.xml" replace="none"/> >>> <xf:submission id="s01" method="post" show="new" replace="all" action="xsltforms/txs.php?exec=beautify.txs"> >>> <xf:message level="modeless" ev:event="xforms-submit-error">Submit error.</xf:message> >>> </xf:submission> >>> </xf:model> >>> >>> </head> >>> <body> >>> <xf:group> >>> <label>why does this not work?</label> >>> >>> <xf:input ref="forename"><label>Forename</label></xf:input> >>> <xf:input ref="surname"><label>Surname></label></xf:input> >>> >>> </xf:group> >>> <xf:trigger> >>> <xf:label>New</xf:label> >>> <xf:action ev:event="DOMActivate"> >>> <xf:insert context="/items" origin="instance('template')/person" nodeset="persName" position="after" at="count(persName)"/> >>> </xf:action> >>> </xf:trigger> >>> <xf:submit submission="s01"> >>> <xf:label>View</xf:label> >>> </xf:submit> >>> </body> >>> </html> >>> <c709c5ba.png> >>> >>> _______________________________________________ >>> Xsltforms-support mailing list >>> Xsl...@li... >>> https://lists.sourceforge.net/lists/listinfo/xsltforms-support >>> >>> _______________________________________________ >>> Xsltforms-support mailing list >>> Xsl...@li... >>> https://lists.sourceforge.net/lists/listinfo/xsltforms-support |