Hlavní navigace

Jabber - komunikačný protokol (7)

Peter Sivák 6. 9. 2004

V siedmej časti seriálu budeme opisovať výmenu formulárov medzi používateľmi a aplikáciami v Jabbere. Formuláre môžu slúžiť na vytvorenie jednoduchého používateľského rozhrania na komunikáciu s roBotmi.

Predstavme si takýto scenár: používateľ našiel chybu v programe, ktorý používa, a chce ju oznámiť programátorom, ktorí ho vyvíjajú. Prihlási sa do diskusnej miestnosti venovanej danému programu a medzi účastníkmi vyhľadá roBota, ktorý je určený na ohlasovanie chýb v programe. Tento roBot mu poskytne formulár, ktorý používateľ vyplní a odošle späť.

Aj keď spomínaného roBota ešte zrejme nikto nenaprogramoval, technológie na to nevyhnutné sú k dispozícii. Všetko potrebné sme už v seriáli opisovali – až na posielanie formulárov. Pri vytváraní miestností v Multi User Chat protokole sme spomínali, že výmena formulárov prebieha pomocou protokolu Data Forms (JEP-04). A práve o ňom si povieme viac v tejto časti.

Data Forms

Formuláre obsahujú štruktúrované dáta, ktoré sa vymieňajú medzi používateľom a aplikáciou. V samotnom Jabbere sa formuláre používajú napr. pri registrovaní transportu. Kým ICQ transportu stačí zadanie UIN a hesla, MSN transport vyžaduje ešte aj meno používateľa. Protokol Data Forms umožňuje, aby požadované údaje nemuseli byť natvrdo definované v protokole, ale boli vyžiadané ad hoc. Data Forms by mal byť podľa tvorcov akýsi kompromis medzi jednoduchými dvojicami meno-hodnota a komplexným protokolom XForms.

Formulár môže byť prenášaný v Message, IQ aj v Presence paketoch. Je reprezentovaný XML elementom <x/> v mennom priestore jabber:x:data. Element <x/> má atribút „type“, ktorého hodnota je jedna z týchto:

  • form – roBot posiela prazdny formulár na vyplnenie
  • submit – používateľ vracia vyplnený formulár späť
  • cancel – používateľ stlačil cancel
  • result – roBot vracia nejaké údaje po spracovaní, napr. výsledky vyhľadávania.

Element <x/> obsahuje elementy

  • title – názov formulára
  • instruction – inštrukcie (text), ako vyplniť formulár

a niekoľko elementov <field/> s jednotlivými položkami formulára.

Príklad pre nevyplnený formulár odoslaný v IQ pakete:

<iq from='BugReportBot@program.jabber.org'
  to='psivak@jabber.sk'
  type='result'
  id='1'>
  <x xmlns='jabber:x:data' type='form'>
    <title>Bug Report</title>
    <instructions>Vyplňte tieto údaje:</instructions>
    <field type='text-single'
      label='Názov programu'
        var='programname'/>
    <field type='text-multi'
      label='Popis chyby'
        var='description'/>
    <field type='list-single'
      label='Verzia'
        var='version'>
      <option label='0.9'><value>0.9</value></option>
      <option label='1.0'><value>1.0</value></option>
      <option label='2.0'><value>2.0</value></option>
    </field>
  </x>
</iq> 

Typy položiek sú

  • boolean pre logické hodnoty
  • fixed pre popisný text
  • hidden pre neviditelné položky, ktoré sa vrátia spolu s formulárom
  • jid-single pre zoznam Jabber IDov (vyberá sa jeden)
  • jid-multi pre zoznam Jabber IDov (môže sa vybrať viac)
  • list-single pre zoznam (vyberá sa jedna položka)
  • list-multi pre zoznam (môže sa vybrať viac položiek)
  • test-single pre jednoriadkový text
  • text-multi pre viacriadkový text
  • text-private pre zadávanie hesiel

Formulár sa vyplní pridaním elementov <value/> do jednotlivých elementov <field/>.

Formuláre v Smacku

Smack implemetuje formuláre v triede Form. Konštruktorom vytvoríme nový formulár:

Form myForm = new Form(Form.TYPE_FORM); 

Vo vytvorenom formulári vyplníme názov a inštrukcie:

myForm.setTitle("Bug Report");
myForm.setInstructions("Vyplňte tieto údaje:"); 

Pokračujeme vytváraním položiek a ich pridávaním do formulára:

field = new FormField("programname");
field.setType(FormField.TYPE_TEXT_SINGLE);
field.setLabel("Názov programu");
myForm.addField(field);

field = new FormField("description");
field.setType(FormField.TYPE_TEXT_MULTI);
field.setLabel("Popis chyby");
myForm.addField(field); 

A nakoniec vytvorený formulár odošleme v Message pakete:

Message msg = chat.createMessage();
msg.addExtension(formToSend.getDataFormToSend());
chat.sendMessage(msg);

Vyplnenie položky:

myForm.setAnswer("programname", "jabberd"); 

Záver

Formuláre protokolu Data Forms spolu s messagingovými funkciami XMPP umožňujú vytvárať online služby s jednoduchým používateľským rozhraním. Komunikácia s roBotmi tak nie je obmedzená len na posielanie textových správ.

Našli jste v článku chybu?
Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Root.cz: Kamery Sony se dají ovládnout na dálku

Kamery Sony se dají ovládnout na dálku

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život