Describe Example markup for nested models here.


<?xml version="1.0" encoding="utf-8" ?>
<html
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:br="http://www.x-port.net/bindingresolver/"
        xmlns:xf="http://www.w3.org/2002/xforms"
        xmlns:sxf="http://www.w3.org/2008/simplexforms"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
        <head>
                <title>Simple XForms</title>
        </head>

        <body>
                <h1>Example of nested model syntax...</h1>
                                
                <!-- consume generic flight info service and adapt to our airline and set defaults
                     appropriate to common usage, e.g. today's date, our airline, etc -->
                
                <xf:model id="AA_flight_info_service">
                        <xf:instance id="AA_defaults">  
                                <instanceData xmlns="">
                                        <datename>Today</datename>
                                        <date/>
                                        <departure_city/>
                                        <arrival_city/>
                                        <flight_no/>
                                        <locator_code/>
                                </instanceData>
                        </xf:instance>
                        
                        <!-- set up query parms using context info to simplify data entry from mobile device:
                                today's date
                                current location, if available from GPS or other accessible locator info
                                default carrier 
                                locator code checksum for quick validation -->
                                
                        <xf:bind nodeset="instance('')/time" calculate="now()" />
                        <xf:bind nodeset="instance('AA_defaults')/departure_city" calculate="...LatLongToCity(GPScoord())..."/>
                        <xf:bind nodeset="instance('AA_defaults')/locator_code" constraint="...AA locator checksum..."/>
                        <xf:bind nodeset="instance('AA_defaults')/date" calculate="...dateFromDatename(../datename)..."/>
                        
                        <xf:instance id="offered_dates">        
                                <instanceData xmlns="">
                                        <dates>
                                        <date>Today</date>
                                        <date>Tomorrow</date>
                                        <date>Yesterday</date>
                                </dates>
                                </instanceData>
                        </xf:instance>
                        
                        <xf:instance id="valid_arrival_cities">
                                <instanceData xmlns="">
                                        <city/>  <!-- computed once we have a departure city...looks up AA routes from that city -->
                                </instanceData>
                        </xf:instance>
                        <xf:bind nodeset="arrival_city" relevant="../departure_city <> '' "/>
                        <!-- add web service lookup for valid arrival cities below... -->
                        
                        <xf:submission id="AA_query" />  
                        <!-- want to be able to set parms and redirect to submodel submission, maybe after doing our own web service invocation to fill in values... -->                        

                        <!-- wire up instance elements in the AA model to the underlying generic query service -->
                        
                        <!-- start and end dates are the same for the AA service...only does single date query -->
                        <xf:bind nodeset="instance('query_parms')/start_date" calculate="instance('AA_defaults')/date"/>
                        <xf:bind nodeset="instance('query_parms')/end_date" calculate="instance('AA_defaults')/date"/>
                        
                        <!-- time is always set to now() -->
                        <xf:bind nodeset="instance('query_parms')/time" calculate="now()" />
                        
                        <!-- airline is always AA -->
                        <xf:bind nodeset="instance('query_parms')/airline" calculate="AA" />
                        
                        <!-- would be nice if the following could be "linked" by reference from the AA instance, vs. copied -->
                        
                        <xf:bind nodeset="instance('query_parms')/departure_city" calculate="instance('AA_defaults')/departure_city" />
                        <xf:bind nodeset="instance('query_parms')/arrival_city" calculate="instance('AA_defaults')/arrival_city" />
                        <xf:bind nodeset="instance('query_parms')/flight_no" calculate="instance('AA_defaults')/flight_no" />
                        <xf:bind nodeset="instance('query_parms')/locator" calculate="instance('AA_defaults')/locator" />
                        
                        <!------------------------------->

                        <!-- this model corresponds to a generic flight info web service -->
                        
                        <xf:model id="flight_info_service">  
                        
                                <xf:instance id="query_parms">  
                                        <instanceData xmlns="">
                                                <start_date/>                   <!-- start date for flight queries, required -->
                                                <end_date/>                     <!-- end date for flight queries, required -->
                                                <time/>                         <!-- if provided, find flights near this time -->
                                                <airline/>                      <!-- required -->
                                                <departure_city/>               <!-- one of departure city or arrival city must be filled in if locator_code and flight_no are blank --> 
                                                <arrival_city/>                 
                                                <locator_code/>                 <!-- if provided, search for flights in this specific reservation -->
                                                <flight_no/>                    <!-- if provided, override time preference -->
                                        </instanceData>
                                </xf:instance>
                                
                                <xf:instance id="search_results">
                                        <flights>
                                                <flight_no/>
                                                <departure_datetime/>   <!-- ISO datetime -->
                                                <arrival_datetime/>     <!-- ISO datetime -->
                                                <departure_city/>
                                                <arrival_city/>
                                        </flights>
                                </xf:instance>
                                
                                <xf:submission id="submit1" method="..." action="..." />
                        </xf:model>             
                        
                </xf:model>     
                
                <!-- model as generated -->
                
                
                <!-- UI using generated model -->

                <xf:group model="AA_flight_info_service"> 
                        
                        <xf:input ref="departure_city">
                                <xf:label>Departure City:</xf:label>
                        </xf:input>
                        
                        <xf:select1 ref="instance('AA_flight_info_service')/arrival_city">
                                <xf:label>Arrival City:</xf:label>
                                <xf:itemset nodeset="instance('valid_arrival_cities')/city">
                                        <xf:label ref="."/>
                                        <xf:value ref="."/>
                                </xf:itemset>
                        </xf:select1>
                        
                        <xf:select1 ref="instance('AA_flight_info_service')/datename">
                                <xf:label>Date</xf:label>
                                <xf:itemset nodeset="instance('offered_dates')/date">
                                        <xf:label ref="."/>
                                        <xf:value ref="."/>
                                </xf:itemset>
                        </xf:select1>
                        
                        <xf:submit submission="AA_query">
                                <xf:label>Search</xf:label>
                        </xf:submit>
                                                
                </xf:group>     

        </body>
</html>

Example markup for nested models (last edited 2008-02-03 21:32:02 by CharlesWiecha)