Základní způsob práce

NEST-Server pracuje obdobným způsobem jako „klasický“ server - čeká na příslušném portu (nastaveným na záložce Obecné) na požadavek uživatele. Při obdržení požadavku nejprve identifikuje uživatele podle jeho ID, které se předává jako parametr v URL adrese (pokud se jedná o nového uživatele, je mu vygenerováno náhodné patnáctimístné ID), poté je požadavek uživatele zapsán do logového souboru a pak je požadavek zpracován. Požadavky uživatele mohou být následující:

  • index - zobrazí základní stránku pro výběr báze znalostí;
  • loadbase - zobrazí stránku s popisem báze znalostí;
  • question - pošle odpovědi na zadanou otázku;
  • questionnaire - zobrazí dotazník s jednotlivými odpověďmi;
  • forward - odešle vyplněný dotazník;
  • cokoliv jiného - pokusí se načíst příslušný objekt (obrázek, css style, ...), pokud je v povoleném adresáři.


Báze znalostí

Báze znalostí, které jsou na serveru dostupné, jsou načteny do paměti serveru při jeho spuštění (respektive při spuštění příkazu Server / Znovu načti báze) a pro každého uživatele je vytvořena kopie báze, kterou si vybral. Báze je zrušena při zrušení uživatele (uživatel je zrušen, pokud nevyšle na server požadavek po určitou nastavenou dobu) nebo pokud uživatel spustí konzultaci s jinou bází znalostí.

Báze znalostí, které mají být na serveru dostupné, musí být uloženy v adresáři „bases“ (ten se musí nalézat na stejném místě jako soubor NEST_server.exe) a musí mít koncovku „.xml“. Zároveň musí být v tomto adresáři uložen soubor „base.dtd“ sloužící pro kontrolu syntaxe báze znalostí.


Webové stránky

Webové stránky pro systém jsou vytvořeny stejně jako klasické webové stránky (tj. pomocí jazyka html), jsou však doplněny o „pseudo tagy“ umožňující provádět konzultaci se systémem. Jak vytvořit tyto webové stránky se dozvíte v kapitole „Tvorba stránek“.

NEST Server nabízí možnost mít různé stránky pro každou dostupnou bázi znalostí. Jednotlivé sady stránek musí být uloženy v různých podadresářích v adresáři „pages“ (ten se musí nalézat na stejném místě jako soubor NEST_server.exe), přičemž implicitní stránky jsou umístěny v podadresáři „standard“. V nastavení systému na záložce Stránky bází lze pak jednotlivým bázím dostupným na servru přiřadit adresáře se stránkami, které pro ni mají být použity. Soubor pro výběr báze znalostí (index_htm.dta) je společný pro všechny báze a je umístěn přímo pod adresářem „pages“.


Logový soubor

Logový soubor se vytváří na základě nastavení logového souboru (vše do jednoho souboru, oddělovat soubory podle velikosti či podle data). Do souboru jsou zapisovány všechny požadavky zaslané na server v takovéto struktuře:
číslo  IP  ID  datum a čas  Method/URL/Protokol  předchozí stránka  agent
kde číslo je pořadové číslo zápisu, IP je IP adresa uživatele, ID je identifikační řetězec přiřazený uživateli a agent je prohlížeč použitý uživatelem. Jednotlivé položky jsou odděleny tabelátorem, každý záznam je zapsán na jednu řádku.


Spuštění nastavení

Nastavení systému vyvoláte z úvodní obrazovky pomocí hlavního menu Nastavení / Nastavení ...

Veškeré změny v nastavení se provedou až po stisknutí tlačítka OK. Při stisknutí tlačítka Storno se všude nastaví původní hodnoty.


Záložka obecné

Na této záložce se nalézají následující volby:

  • Jazyk systému udává, v jakém jazyce bude systém komunikovat. Na výběr je čeština a angličtina. Jazyková volba neovlivní syntaxi báze znalostí, která zůstává vždy stejná (založená na angličtině). Pozor! Jazyková volba neovlivní webové stránky (a tedy komunikaci s uživatelem). Týká se pouze textů na serveru.
  • Čas výmazu uživatelů určuje čas, po kterém je uživatel odstraněn z paměti systému, pokud nezašle žádný požadavek.
  • Port udává, na kterém portu čeká server na požadavek uživatelů. Standardní port webových stránek je 80, pokud je zadán jiný port, musí ho klient (uživatel) zadávat do URL (např.: http://localhost:8080/index). Pokud je však nastaven port 80, nemůže na daném počítači běžet jiný server.
  • Přeskakovat indexovou stránku pokud je pouze jedna báze - v případě, že je na serveru dostupná pouze jedna báze znalostí a uživatel zadá požadavek na výběr báze znalostí (index), je automaticky tato báze vybrána a zobrazen popis báze.
  • Omezující adresář - pokud je tato volba zaškrtlá a zadán některý adresář, pak veškeré požadavky uživatele na objekty (stránky, obrázky, css soubory) ležící mimo tento adresář a jeho podadresáře jsou zrušeny. Je vhodné jako omezující adresář zadat adresář, pod kterým je uložen soubor „NEST_Server.exe“ a veškeré objekty potřebné pro stránky ukládat do příslušných podadresářů. Zajistíte tak počítač proti stahování jiných souborů, než které určíte.


Záložka stránky bází

Na této záložce můžete nastavovat jednotlivým bázím dostupným na serveru různé webové stránky. V levém sloupci tabulky je seznam dostupných bází, v pravé části tabulky jsou stránky (adresáře se stránkama), které jsou jim přiřazené. Pokud chcete některý adresář změnit, můžete ho buď přímo přepsat, nebo ho vybrat v dialogovém okně po kliknutí na tlačítko „...“.


Záložka log soubory

Na této záložce lze nastavit jakým způsobem se má vytvářet logový soubor. Volbou Vytvářet logový soubor určujete, zda se logový soubor vytvářet má nebo ne (ostatní volby se samozřejmě projeví pouze tehdy, je-li tato volba zaškrtnuta).

Adresář log souborů udává adresář, do kterého se jednotlivé logové soubory vytváří.

Typ logového souboru udává, má-li se vytvářet jeden nebo více logových souborů. Volba 1 soubor znamená, že se vše zapisuje do jednoho souboru, jehož jméno je zadáno v poli Log soubor. Volba podle velikosti znamená, že se do nového souboru začne zapisovat v okamžiku, kdy předchozí soubor dosáhl velikosti zadané v poli velikost souborů. Volba podle data vytváří na každý den právě 1 logový soubor.


Záložka ukládání konzultací

Na této záložce lze zadat, aby systém ukládal každou konzultaci, která je provedena do konce (konzultace se ukládá v momentě zobrazení výsledků) - pro ukládání zaškrtněte volbu ukládat konzultace a do pole adresář pro ukládání konzultací nastavte adresář, kam se mají jednotlivé konzultace ukládat.


Podoba stránek

Webové stránky pro systém jsou vytvořeny stejně jako klasické webové stránky (tj. pomocí jazyka html), jsou však doplněny o „pseudo tagy“ umožňující provádět konzultaci se systémem. Přehled „pseudo tagů“ a jejich funkce naleznete v části „Pseudo tagy“.


index_htm.dta

Tato stránka slouží pro výběr báze znalostí. Je pouze jedna, i když je více druhů stránek pro různé báze a musí se nalézat přímo v adresáři pages. Tato stránka může být automaticky přeskakována v případě, že na serveru je dostupná pouze jedna báze znalostí - v nastavení je třeba zaškrtnou volbu Přeskakovat indexovou stránku pokud je jen jedna báze. Pokud je na serveru dostupných více bází a přesto chcete indexovou stránku přeskakovat, lze tak učinit pomocí JavaScriptu pro přesměrování na další stránku a vybranou bázi předat jako parametr. Příklad takového JavaScriptu naleznete v následující sekci (jméno báze znalostí, která se má spustit, se předává v parametru baze).

V indexové stránce musí být seznam pro výběr báze znalostí. Tento seznam vložíte do stránky následovně:

<UL>
 <#ListOfBases>
</UL>


Příklad JavaScriptu pro přeskakování indexové stránky

Pokud se má přeskakovat indexová stránka a zároveň se vybrat některá báze znalostí, je třeba tento kód vložit do hlavičky stránky „index_htm.dta“ a do tagu <BODY> doplnit atribut OnLoad="Presmeruj()".

<SCRIPT language="Javascript">
 var pole = window.location.search.substr(1).split("&");
 var httpGetVars = new Array();
 for(i = 0; i < pole.length; i++){
    httpGetVars[pole[i].split("=")[0]] = unescape(pole[i].split("=")[1]);
 }

 function Presmeruj(){
   window.location = "loadbase="+httpGetVars["baze"]+"<#id>";
 };
 </SCRIPT>


desc_htm.dta

Tato stránka slouží pro zobrazení popisu báze. Zobrazí se po vybrání báze znalostí (pokud je báze jen jedna a indexová stránka se přeskakuje, pak se tato stránka zobrazí jako první).

Stránka musí obsahovat tlačítko pro zahájení konzultace:

<FORM action="question">
 <INPUT type="Submit" Value="Start"/>
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
Dalším vhodný „pseudo tag“ pro tuto stránka je tag pro zobrazení popisu báze znalostí:
<#BaseDescription>


dotazbinary_htm.dta

Tato stránka slouží pro položení dotazu uživateli na binární atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
  WeightOutOfRange = "Váha mimo rozsah!";
  NotWeight = "Váha není zadána!";
  NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceValue>
  <#CheckOfBinary>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro vkládání váhy: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="jistě ano" OnClick="InputValue('yes')">
<INPUT  Type="submit" Value="jistě ne" OnClick="InputValue('no')">
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknown')">


dotazsingle_htm.dta

Tato stránka slouží pro položení dotazu uživateli na jednoduchý nominální atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
   WeightOutOfRange = "Váha mimo rozsah!";
   NotWeight = "Váha není zadána!";
   NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceValue>
  <#CheckOfSingle>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro výběr odpovědi (atribut lines udává počet řádek pole): <#SelectValue lines="1">,
pole pro vkládání váhy: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="jistě ano" OnClick="InputValue('yes')">
<INPUT  Type="submit" Value="jistě ne" OnClick="InputValue('no')">
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknown')">


dotazmultiple_htm.dta

Tato stránka slouží pro položení dotazu uživateli na množinový nominální atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceMultipleValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

 <SCRIPT language="JavaScript">
   WeightOutOfRange = "Váha mimo rozsah v poli číslo ";
   NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceMultipleValue>
  <#CheckOfMultiple>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
seznam výroků s poli pro odpovědi a případnými tlačítky pro předvolené odpovědi (jsou-li uvedeny příslušné atributy): <#ListOfMultiple yesbutton="Ano" nobutton="Ne" unknownbutton="Nevim" irrelevantbutton="Irelevantní">,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>


dotaznumeric_htm.dta

Tato stránka slouží pro položení dotazu uživateli na numerický atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
    WeightOutOfRange = "Váha mimo rozsah!";
    ValueOutOfRange = "Hodnota mimo rozsah!";
    NotNumber = "Zadaná hodnota není číslo!";
    NotValue = "Hodnota není zadána!";
  <#ReplaceValue>
  <#CheckOfNumeric>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro vkládání hodnoty: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí hodnoty: <#ValueRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknownnumeric')">


result_htm.dta

Tato stránka slouží pro zobrazení výsledků konzultace. Systém zobrazí tuto stránku, jakmile odvodí závěry konzultace.

Tato stránka by měla obsahovat tabulku s výsledky. Podoba tabulky by měla být přibližně takováto:

   <TABLE cellspacing="2" cellpadding="2">
<TR>
 <TD><b>Jméno</b></TD>
 <TD><b>Min. váha</b></TD>
 <TD><b>Max. váha</b></TD>
 <TD><b>Stav</b></TD>
</TR>
<#AllPropositionsTrue>
<#AllPropositionsNeutral>
<#AllPropositionsFalse>
</TABLE>
Tabulka nemusí obsahovat tagy pro vypsání všech výroků (#AllPropositions...), ale například jen cílů (#Results...) nebo necílových výroků (#Propositions...). Může také obsahovat jen kladné či jen záporné výroky.

Z této stránky může vést odkaz na stránku pro úpravu odpovědí: <a href="questionnaire<#id>">Upravit odpovědi</a>


questionnaire_htm.dta

Tato stránka slouží pro úpravu odpovědí. Jsou na ní zobrazeny všechny otázky a odpovědi a uživatel je může libovolně měnit. Po odeslání této stránky se opět zobrazí stránka s výsledky.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat:

<SCRIPT language="JavaScript">
    WeightOutOfRange = "Váha mimo rozsah!";
    ValueOutOfRange = "Hodnota mimo rozsah!";
    NotNumber = "Zadaná hodnota není číslo!";
    NotValue = "Hodnota není zadána!";
    NotWeight = "Vána není zadána!";
    CertainlyYes = "Jistě ano";
    CertainlyNo = "Jistě ne";
    ProbablyYes = "Asi ano";
    ProbablyNo = "Asi ne";
    Unknown = "Nevím";
    Irrelevant = "Irelevantní";
  <#ReplaceMultipleValue>
  <#CheckQuestionnaire>
  <#QuestionnaireNotNumbers>
 </SCRIPT>
Dále musí obsahovat začátek formuláře pro vyplnění odpovědi: <#BeginFormQuestionnaire>,
seznam výroků s poli pro odpovědi a případnými tlačítky pro předvolené odpovědi (jsou-li uvedeny příslušné atributy): <#Questionnaire yesbutton="Ano" nobutton="Ne" unknownbutton="Nevim" irrelevantbutton="Irelevantní">,
ukončení formuláře:
<INPUT Type="submit" Value="Odeslat">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Pokud chcete, aby se nevypisovali váhy jednotlivých atributů, ale tyto váhy byly nahrazeny slovními výrazy, přidejte do tagu „<BODY>“ atribut „OnLoad="Nahrad()"“.


Pseudo tagy

tag | vkládaný kód | stránka | popis
<#ListOfBases> <LI><A href = "loadbase=bazei">bazei</A></LI>
... 		index Seznam bází dostupných na serveru
<#id> | ?id=uživatelské id | všechny stránky | Vloží do odkazu parametr s uživatelským id.
<#id_number> | uživatelské id | všechny stránky | Vloží do stránky číslo uživatelova id.
<#BeginForm> <FORM action="question" onsubmit="return kontrolaDat(this)"> dotazbinary
dotazsingle
dotazmultiple
dotaznumeric 		Začátek formuláře pro vkládání vah
<#NameOfAttribute> jméno atributu dotazbinary
dotazsingle
dotazmultiple
dotaznumeric 		Jméno atributu aktuálního dotazu
<#CommentOfAttribute> komentář atributu dotazbinary
dotazsingle
dotazmultiple
dotaznumeric 		Komentář atributu aktuálního dotazu
<#InputValue> <INPUT name="id atributu"> dotazbinary
dotazsingle
dotaznumeric 		Okno pro zadávání váhy příslušného dotazu
function PrevodCisel function PrevodCisel(zadanaHodnota) {
index = zadanaHodnota.indexOf(".");
if (index > -1) {
zadanaHodnota = zadanaHodnota.substring(0,index) + "," + zadanaHodnota.substring(index+1,zadanaHodnota.length);
}
else {
index = zadanaHodnota.indexOf(",");
if (index > -1) {
zadanaHodnota = zadanaHodnota.substring(0,index) + "." + zadanaHodnota.substring(index+1,zadanaHodnota.length);
};
};
return zadanaHodnota;
};

         součást jiných tagů Funkce pro převádění desetiných znamének na správná
function KontrolaCisla function KontrolaCisla(zadanaHodnota) {
if (isNaN(zadanaHodnota)){
zadanaHodnota = PrevodCisel(zadanaHodnota);
if (isNaN(zadanaHodnota)){alert(NotNumber);return false;};
};
if(zadanaHodnota != "") {
if((parseFloat(zadanaHodnota) >= parseFloat(-rozsah vah))&&(parseFloat(zadanaHodnota) <= parseFloat(rozsah vah))) {
return true;
}
else {
alert(WeightOutOfRange);
return false;
};
}
else {
alert(NotWeight);
return false;
};
};
         součást jiných tagů Kontrola čísla v rámci rozmezí vah báze
<#CheckOfBinary> function PrevodCisla
function KontrolaCisla
function kontrolaDat(vstup) {
zadanaHodnota = vstup.id atributu.value;
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
if (KontrolaCisla(s1)) {
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
return KontrolaCisla(s2);
}
else {return false;};
}
return KontrolaCisla(zadanaHodnota);
}; 		dotazbinary Javascript pro kontrolu zadávané váhy pro binární dotaz
<#CheckOfSingle> | viz CheckOfBinary | dotazsingle | Javascript pro kontrolu zadávané váhy pro jednoduchý dotaz
<#CheckOfNumeric> function PrevodCisla
function KontrolaCisla
function kontrolaHodnoty(vstup)
if(vstup != "") {
if (isNaN(zadanaHodnota)){
alert(NotValue);
return false;
}
pro omezení zdola [
s1 = "dolní meze";
s1 = PrevodCisel(s1);
if(parseFloat(vstup) < parseFloat(s1)) {
alert(ValueOutOfRange);
return false;
};
]
Pro omezení shora [
s2 = "horní mez";
s2 = PrevodCisel(s2);
if(parseFloat(vstup) > parseFloat(s2)) {
alert(ValueOutOfRange);
return false;
};
]
return true;
} else {return false;};
};

function kontrolaDat(vstup) {
zadanaHodnota = vstup.id atributu.value;
if ((zadanaHodnota.indexOf("[") == 0)&&(zadanaHodnota.indexOf("]") == zadanaHodnota.length - 1)){
return true;};
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
s1 = PrevodCisel(s1);
if (kontrolaHodnoty(s1) == false){
return false;};
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
s2 = PrevodCisel(s2);
if (kontrolaHodnoty(s2) == false){
return false;}
else {return true;};
}
else {
if (!(isNaN(zadanaHodnota))){
zadanaHodnota = PrevodCisel(zadanaHodnota);
return kontrolaHodnoty(zadanaHodnota);}
else {
alert(NotValue);
return false;
};
};
}; 		dotaznumeric JavaScript pro kontrolu hodnot numerického dotazu
<#CheckOfMultiple> function PrevodCisla
function KontrolaCisla
function kontrolaDat(vstup) {
Pro každý výrok množinového atributu [
zadanaHodnota = vstup.id vyrokui.value;
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
if (KontrolaCisla(s1)) {
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
if (!(KontrolaCisla(s2))){
return false;
};
}
else {return false;};
}
else {
if (zadanaHodnota != "") {
if (isNaN(zadanaHodnota)){
zadanaHodnota = PrevodCisel(zadanaHodnota);
if (isNaN(zadanaHodnota)){alert(NotNumber);return false;};
};
if((parseFloat(zadanaHodnota) < parseFloat(-rozsah vah))||(parseFloat(zadanaHodnota) > parseFloat(rozsah vah))) {
alert(WeightOutOfRange + "' + inttostr(i+1)+'");
return false;
};
};
};
]
return true;
}; 		dotazmultiple JavaScript pro kontrolu vah množinového atributu
<#ReplaceValue> function InputValue(hodnota){
if (hodnota == "yes") {hodnota = "rozmezí vah";}
else if (hodnota == "no") {hodnota = "-rozmezí vah";}
else if (hodnota == "irrelevant") {hodnota = "0;0";}
else if (hodnota == "unknown") {hodnota = "-rozmezí vah;rozmezí vah";}
else if (hodnota == "unknownnumeric") {hodnota = "[-rozmezí vah;rozmezí vah]";}
else if (hodnota.substring(0,7) == "weight:") {
hodnota = hodnota.substring(8,hodnota.length);
};
document.all['id atributu'].value = hodnota;
};
         dotazbinary
dotazsingle
dotaznumeric 		Funkce nahrazující příslušnou hodnotu tlačítka odpovídající číselnou hodnotou váhy.
<#ReplaceMultipleValue> function InputValue(hodnota, vstup){
if (hodnota == "yes") {hodnota = "rozmezí vah";}
else if (hodnota == "no") {hodnota = "-rozmezí vah";}
else if (hodnota == "irrelevant") {hodnota = "0;0";}
else if (hodnota == "unknown") {hodnota = "-rozmezí vah;rozmezí vah";};
else if (hodnota == "unknownnumeric") {hodnota = "[-rozmezí vah;rozmezí vah]";}
else if (hodnota.substring(0,7) == "weight:") {
hodnota = hodnota.substring(8,hodnota.length);
};
document.all[vstup].value = hodnota;
}; 		dotazmultiple Funkce nahrazující příslušnou hodnotu tlačítka odpovídající číselnou hodnotou váhy pro množinové výroky.
<#WeightRange> -rozsah vah;rozsah vah dotazbinary
dotazsingle
dotazmultiple 		Rozsah vah báze znalostí.
<#ValueRange Decimal="číslo"> | dolní mez - horní mez | dotaznumeric | Rozsah vah numerického atributu dotazu. Parametr Decimal udává počet desetinných míst, na které se má číslo zaokrouhlit.
<#SelectValue lines="číslo"> <SELECT name="value" size="číslo">
Pro každý výrok jednoduchého atributu [
<OPTION value="id výroku" u prvního selected>jméno výroku
]
</SELECT> 		dotazsingle Výběrový list odpovědí pro jednoduchý dotaz
<#ListOfMultiple yesbutton="text 1" nobutton="text 2" irrelevantbutton="text 3" unknownbutton="text 4"> Pro každý výrok množinového atributu:
<TR>
<TD>jméno výroku</TD>
<TD><INPUT name="id výroku"></TD><TD>
Je-li zadán yesbutton [
<INPUT Type="button" Value="text 1 OnClick="InputValue('yes','id výroku')" class="yesbutton">
]
Je-li zadán nobutton [
<INPUT Type="button" Value="text 2" OnClick="InputValue('no','id výroku')" class="nobutton">
]
Je-li zadán irrelevantbutton [
<INPUT Type="button" Value="text 3" OnClick="InputValue('irrelevant','id výroku')" class="irrelevantbutton">
]
Je-li zadán unknownbutton [
<INPUT Type="button" Value="text 4" OnClick="InputValue('unknown','id výroku')" class="unknownbutton">
]
</TD></TR>
         dotazmultiple Okna pro zadávání vah výroků pro množinový atribut.
<#ResultsTrue> Pro všechny cíle, které jsou kladné:
<TR>
<TD class="result_true">
jméno výroku
</TD>
<TD class="result_true">
minimální váha
</TD>
<TD class="result_true">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_true">
stav výroku</TD>
</TR> 		results Vypíše do tabulky cíle s kladnou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#ResultsFalse> Pro všechny cíle, které jsou záporné:
<TR>
<TD class="result_false">
jméno výroku
</TD>
<TD class="result_false">
minimální váha
</TD>
<TD class="result_false">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_false">
stav výroku</TD>
</TR> 		results Vypíše do tabulky cíle se zápornou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#ResultsNeutral> Pro všechny cíle, které jsou neutrální:
<TR>
<TD class="result_neutral">
jméno výroku
</TD>
<TD class="result_neutral">
minimální váha
</TD>
<TD class="result_neutral">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_neutral">
stav výroku</TD>
</TR> 		results Vypíše do tabulky cíle s neutrální váhou (minimální váha menší nebo rovna nule, maximální váha větší nebo rovna nule). U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#AllPropositionsTrue> Pro všechny výroky (cíle i necílové výroky), které jsou kladné:
<TR>
<TD class="result_true">
jméno výroku
</TD>
<TD class="result_true">
minimální váha
</TD>
<TD class="result_true">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_true">
stav výroku</TD>
</TR> 		results Vypíše do tabulky výroky (cílové i necílové) s kladnou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#AllPropositionsFalse> Pro všechny výroky (cíle i necílové výroky), které jsou záporné:
<TR>
<TD class="result_false">
jméno výroku
</TD>
<TD class="result_false">
minimální váha
</TD>
<TD class="result_false">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_false">
stav výroku</TD>
</TR> 		results Vypíše do tabulky výroky (cílové i necílové) se zápornou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#AllPropositionsNeutral> Pro všechny výroky (cíle i necílové výroky), které jsou neutrální:
<TR>
<TD class="result_neutral">
jméno výroku
</TD>
<TD class="result_neutral">
minimální váha
</TD>
<TD class="result_neutral">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_neutral">
stav výroku</TD>
</TR> 		results Vypíše do tabulky výroky (cílové i necílové) s neutrální váhou (minimální váha menší nebo rovna nule, maximální váha větší nebo rovna nule). U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#PropositionsTrue> Pro všechny výroky, které nejsou cíle a jsou kladné:
<TR>
<TD class="result_true">
jméno výroku
</TD>
<TD class="result_true">
minimální váha
</TD>
<TD class="result_true">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_true">
stav výroku</TD>
</TR> 		results Vypíše do tabulky necílové výroky s kladnou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#PropositionsFalse> Pro všechny výroky, které nejsou cíle a jsou záporné:
<TR>
<TD class="result_false">
jméno výroku
</TD>
<TD class="result_false">
minimální váha
</TD>
<TD class="result_false">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_false">
stav výroku</TD>
</TR> 		results Vypíše do tabulky necílové výroky se zápornou váhou. U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#PropositionsNeutral> Pro všechny výroky, které nejsou cíle a jsou neutrální:
<TR>
<TD class="result_neutral">
jméno výroku
</TD>
<TD class="result_neutral">
minimální váha
</TD>
<TD class="result_neutral">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
<TD class="result_neutral">
stav výroku</TD>
</TR> 		results Vypíše do tabulky necílové výroky s neutrální váhou (minimální váha menší nebo rovna nule, maximální váha větší nebo rovna nule). U každého výroku je jméno, minimální a maximální váha (jsou-li stejné, maximální se neobjeví) a stav výroku.
<#ResultsNameTrue> Pro všechny cíle, které jsou kladné:
<TR>
<TD class="result_true">
jméno výroku
</TD>
</TR> 		results Vypíše do tabulky jména cílů s kladnou váhou.
ResultsNameNeutral Pro všechny cíle, které jsou neutrální:
<TR>
<TD class="result_neutral">
jméno výroku
</TD>
</TR> 		results Vypíše do tabulky jména cílů s neutrální váhou.
<#ResultsNameFalse> Pro všechny cíle, které jsou záporné:
<TR>
<TD class="result_false">
jméno výroku
</TD>
</TR> 		results Vypíše do tabulky jména cílů se zápornou váhou.
<#ResultsWeightTrue> Pro všechny cíle, které jsou kladné:
<TR>
<TD class="result_true">
minimální váha
</TD>
<TD class="result_true">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
</TR> 		results Vypíše do tabulky váhy cílů s kladnou váhou. U každého výroku je minimální a maximální váha (jsou-li stejné, maximální se neobjeví).
<#ResultsWeightNeutral> Pro všechny cíle, které jsou neutrální:
<TR>
<TD class="result_neutral">
minimální váha
</TD>
<TD class="result_neutral">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
</TR> 		results Vypíše do tabulky váhy cílů s neutrální váhou. U každého výroku je minimální a maximální váha (jsou-li stejné, maximální se neobjeví).
<#ResultsWeightFalse> Pro všechny cíle, které jsou záporné:
<TR>
<TD class="result_false">
minimální váha
</TD>
<TD class="result_false">
maximální váha (je-li stejná jako minimální, tak nic)
</TD
</TR> 		results Vypíše do tabulky váhy cílů se zápornou váhou. U každého výroku je minimální a maximální váha (jsou-li stejné, maximální se neobjeví).
<#ResultsCommentTrue> Pro všechny cíle, které jsou kladné:
<TR>
<TD class="result_true">
komentář výroku
</TD>
</TR> 		results Vypíše do tabulky komentář cílů s kladnou váhou.
<#ResultsCommentNeutral> Pro všechny cíle, které jsou neutrální:
<TR>
<TD class="result_neutral">
komentář výroku
</TD>
</TR> 		results Vypíše do tabulky komentář cílů s neutrální váhou.
<#ResultsCommentFalse> Pro všechny cíle, které jsou záporné:
<TR>
<TD class="result_false">
komentář výroku
</TD>
</TR> 		results Vypíše do tabulky komentář cílů se zápornou váhou.
<#NameOfBase> | Jméno báze | všechny stránky | Vypíše jméno aktuálně nahrané báze znalostí.
<#BaseDescription> | Popis báze | všechny stránky | Vypíše popis aktuálně nahrané báze znalostí.
<#Questionnaire yesbutton="text 1" pyesbutton="text 1b" nobutton="text 2" pnobutton="text 2b" irrelevantbutton="text 3" unknownbutton="text 4"> Pro všechny dotazy:
Jde-li o binární atribut [
<TR>
<TD class="questioncell">jméno atributu</TD>
<TD class="answercell"><FONT id="textid atributu"></FONT>
<p style="visibility: hidden">
<INPUT name="id atributu" value="minimální váha atributu;maximální váha atributu"></p>
</TD>
<TD class="buttonscell"> je-li zadán yesbutton [
<INPUT Type="button" Value="text 1" OnClick="InputValue('yes','id atributu'), Nahrad()" class="yesbutton"><BR>
]
je-li zadán nobutton [
<INPUT Type="button" Value="text 2" OnClick="InputValue('no','id atributu'), Nahrad()" class="nobutton"><BR>
]
je-li zadán pyesbutton [
<INPUT Type="button" Value="text 1b" OnClick="InputValue('weight:rozsah báze znalostí / 2','id atributu'), Nahrad()" class="pyesbutton"><BR>
]
je-li zadán pnobutton [
<INPUT Type="button" Value="text 2b" OnClick="InputValue('weight:-rozsah báze znalostí / 2','id atributu'), Nahrad()" class="pnobutton"><BR>
]
je-li zadán irrelevantbutton [
<INPUT Type="button" Value="text 3" OnClick="InputValue('irrelevant','id atributu'), Nahrad()" class="irrelevantbutton"><BR>
]
je-li zadán unknownbutton [
<INPUT Type="button" Value="text 4" OnClick="InputValue('unknown','id atributu'), Nahrad()" class="unknownbutton"><BR>
]
</TR>
]
Jde-li o jednoduchý nominální atribut [
<TR>
<TD class="questioncell">jméno atributu</TD>
<TD class="answercell"><SELECT name="id atributu__value" size="3">
pro každý výrok atributu [
<OPTION value="id výroku" pro vybraný výrok [selected]>jméno výroku
]
</SELECT><BR><BR>
<FONT id="textid atributu"></FONT><p style="visibility: hidden"><INPUT name="id atributu" value="váha vybraného výroku"></p></TD>
<TD class="buttonscell">
je-li zadán yesbutton [
<INPUT Type="button" Value="text 1" OnClick="InputValue('yes','id atributu'), Nahrad()" class="yesbutton"><BR>
]
je-li zadán pyesbutton [
<INPUT Type="button" Value="text 1b" OnClick="InputValue('weight:rozsah báze znalostí / 2','id atributu'), Nahrad()" class="pyesbutton"><BR>
]
je-li zadán irrelevantbutton [
<INPUT Type="button" Value="text 3" OnClick="InputValue('irrelevant','id atributu'), Nahrad()" class="irrelevantbutton"><BR>
]
je-li zadán unknownbutton [
<INPUT Type="button" Value="text 4" OnClick="InputValue('unknown','id atributu'), Nahrad()" class="unknownbutton"><BR>
]
</TD></TR>
]
Jde-li o množinový nominální atribut, tak pro každý výrok atributu [
<TR>
<TD class="questioncell">jméno výroku</TD>
<TD class="answercell"><FONT id="textid atributu__id výroku"></FONT><p style="visibility: hidden"><INPUT name="id atributu__id výroku" value="minimální váha;maximální váha"></p></TD>
<TD class="buttonscell">
je-li zadán yesbutton [
<INPUT Type="button" Value="text 1" OnClick="InputValue('yes','id atributu__id výroku'), Nahrad()" class="yesbutton"><BR>
]
je-li zadán nobutton [
<INPUT Type="button" Value="text 2" OnClick="InputValue('no','id atributu__id výroku'), Nahrad()" class="nobutton"><BR>
]
je-li zadán pyesbutton [
<INPUT Type="button" Value="text 1b" OnClick="InputValue('weight:rozsah báze znalostí / 2','id atributu__id výroku'), Nahrad()" class="pyesbutton"><BR>
]
je-li zadán pnobutton [
<INPUT Type="button" Value="text 2b" OnClick="InputValue('weight:-rozsah báze znalostí / 2','id atributu__id výroku'), Nahrad()" class="pnobutton"><BR>
]
je-li zadán irrelevantbutton [
<INPUT Type="button" Value="text 3" OnClick="InputValue('irrelevant','id atributu__id výroku'), Nahrad()" class="irrelevantbutton"><BR>
]
je-li zadán unknownbutton [
<INPUT Type="button" Value="text 4" OnClick="InputValue('unknown','id atributu__id výroku'), Nahrad()" class="unknownbutton"><BR>
]
</TD></TR>
]
Jde-li o numerický atribut [
<TR>
<TD class="questioncell">jméno atributu</TD>
je-li zadána hodnota atributu [
if (Atr.weight.min_hodnota = vaha_TRUE[0]) and (Atr.weight.max_hodnota = vaha_TRUE[1]) then <TD class="answercell"><INPUT name="id atributu" value="minimální hodnota;maximální hodnota"></TD>
]
je-li zadána váha atributu [
<TD class="answercell"><INPUT name="id atributu" value="[minimální váha;maximální váha]"></TD>
]
<TD class="buttonscell"> je-li zadán unknownbutton [
<INPUT Type="button" Value="text 4" OnClick="InputValue('unknownnumeric','id atributu')" class="unknownbutton"><BR>
]
]
         questionnaire Tabulka pro dotazník
<#BeginFormQuestionnaire> | <FORM action="forward" onsubmit="return kontrolaDat(this)"> | questionnaire | Začátek formuláře dotazníku.
CheckQuestionnaire rozmez := Uzivatel.RozmeziVah; function PrevodCisla
function KontrolaCisla
pro každý atribut [
jde-li o dotaz na numerický atribut [ if (Atr is TAtribut_numeric)and(Atr.dotaz = question) then begin if TAtribut_numeric(Atr).omezen_zdola then s1 := Fltostr(TAtribut_numeric(Atr).dolni_mez); if TAtribut_numeric(Atr).omezen_shora then s2 := Fltostr(TAtribut_numeric(Atr).horni_mez); function kontrolaHodnotyid atributu(vstup){
if(vstup != "") {
if (isNaN(vstup)){
alert(NotValue);
return false;
}
je-li atribut omezen zdola [
if TAtribut_numeric(Atr).omezen_zdola then s1 = "dolní mez";
s1 = PrevodCisel(s1);
if(parseFloat(vstup) < parseFloat(s1)) {
alert(ValueOutOfRange);
return false;
};
]
je-li atribut omezen zdola [
s2 = "horní mez";
s2 = PrevodCisel(s2);
if(parseFloat(vstup) > parseFloat(s2)) {
alert(ValueOutOfRange);
return false;
};
]
return true;
} else {return false;}
};
]
function kontrolaDat(vstup) {
pro všechny dotazy [ jedná-li se o binární nebo jednoduchý atribut [ zadanaHodnota = vstup.id atributu.value;
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
if (KontrolaCisla(s1)) {
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
if (!(KontrolaCisla(s2))){return false;};
}
else {return false;};
}
else {
if (!(KontrolaCisla(zadanaHodnota))){return false;};
};
]
jedná-li se o množinový atribut, tak pro všechny jeho výroky [ zadanaHodnota = vstup.id atributu__id výroku.value;
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
if (KontrolaCisla(s1)) {
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
if (!(KontrolaCisla(s2))){
return false;
};
}
else {return false;};
}
else {
if (zadanaHodnota != "") {
if (isNaN(zadanaHodnota)){
zadanaHodnota = PrevodCisel(zadanaHodnota);
if (isNaN(zadanaHodnota)){alert(NotNumber);return false;};
};
if((parseFloat(zadanaHodnota) < parseFloat(-rozmezí vah))||(parseFloat(zadanaHodnota) > parseFloat(rozmezí vah))) {
alert(WeightOutOfRange + "pořadí výroku");
return false;
};
};
};
]
jedná-li se o numerický atribut [ zadanaHodnota = vstup.id atributu.value;
if ((zadanaHodnota.indexOf("[") == 0)&&(zadanaHodnota.indexOf("]") == zadanaHodnota.length - 1)){
return true;};
strednik = zadanaHodnota.indexOf(";");
if (strednik > 0) {
s1 = zadanaHodnota.substring(0,strednik);
s1 = PrevodCisel(s1);
if (kontrolaHodnotyid atributu(s1) == false){
return false;};
s2 = zadanaHodnota.substring(strednik+1,zadanaHodnota.length);
s2 = PrevodCisel(s2);
if (kontrolaHodnotyid atributu(s2) == false){
return false;}
else {;};
}
else {
if (!(isNaN(zadanaHodnota))){
zadanaHodnota = PrevodCisel(zadanaHodnota);
if(!(kontrolaHodnotyid atributu(zadanaHodnota))){return false;};}
else {
alert(NotValue);
return false;
};
};
]
]
return true;}; 		questionnaire Javascript pro kontrolu vyplněného dotazníku.
QuestionnaireNotNumbers function NahradHodnoty(vaha,id){
strednik = vaha.indexOf(";");
if (strednik > 0) {
s1 = vaha.substring(0,strednik);
s2 = vaha.substring(strednik+1,vaha.length);
}
else {
s1 = vaha;
s2 = vaha;
};
if ((parseFloat(s1) == rozsah vah) +')&&(parseFloat(s2) == rozsah vah)){
document.all[id].innerText = CertainlyYes;};
if ((parseFloat(s1) == -rozsah vah)&&(parseFloat(s2) == -rozsah vah)){
document.all[id].innerText = CertainlyNo;};
if ((parseFloat(s1) == -rozsah vah)&&(parseFloat(s2) == rozsah vah)){
document.all[id].innerText = Unknown;};
if ((parseFloat(s1) == 0)&&(parseFloat(s2) == 0)){
document.all[id].innerText = Irrelevant;};
if ((parseFloat(s1) == rozsah vah / 2)&&(parseFloat(s2) == rozsah vah / 2)){
document.all[id].innerText = ProbablyYes;};
if ((parseFloat(s1) == -rozsah vah / 2)&&(parseFloat(s2) == -rozsah vah / 2)){
document.all[id].innerText = ProbablyNo;};
};
function Nahrad(){
pro všechny dotazy [ jde-li o binární nebo jednoduchý atribut [ NahradHodnoty(document.all["id atributu"].value, "textid atributu")
]
jde-li o množinový atribut, tak pro všechny jeho výroky [ NahradHodnoty(document.all["id atributu__id výroku"].value, "textid atributu__id výroku")
]
]
}; 		questionnaire Javascript pro nahrazování jednotlivých vah příslušnými textovými hodnotami.


Druhy stránek

index_htm.dta

Tato stránka slouží pro výběr báze znalostí. Je pouze jedna, i když je více druhů stránek pro různé báze a musí se nalézat přímo v adresáři pages. Tato stránka může být automaticky přeskakována v případě, že na serveru je dostupná pouze jedna báze znalostí - v nastavení je třeba zaškrtnou volbu Přeskakovat indexovou stránku pokud je jen jedna báze. Pokud je na serveru dostupných více bází a přesto chcete indexovou stránku přeskakovat, lze tak učinit pomocí JavaScriptu pro přesměrování na další stránku a vybranou bázi předat jako parametr. Příklad takového JavaScriptu naleznete v následující sekci (jméno báze znalostí, která se má spustit, se předává v parametru baze).

V indexové stránce musí být seznam pro výběr báze znalostí. Tento seznam vložíte do stránky následovně:

<UL>
 <#ListOfBases>
</UL>

Příklad JavaScriptu pro přeskakování indexové stránky

Pokud se má přeskakovat indexová stránka a zároveň se vybrat některá báze znalostí, je třeba tento kód vložit do hlavičky stránky „index_htm.dta“ a do tagu <BODY> doplnit atribut OnLoad="Presmeruj()".

<SCRIPT language="Javascript">
 var pole = window.location.search.substr(1).split("&");
 var httpGetVars = new Array();
 for(i = 0; i < pole.length; i++){
    httpGetVars[pole[i].split("=")[0]] = unescape(pole[i].split("=")[1]);
 }

 function Presmeruj(){
   window.location = "loadbase="+httpGetVars["baze"]+"<#id>";
 };
 </SCRIPT>

desc_htm.dta

Tato stránka slouží pro zobrazení popisu báze. Zobrazí se po vybrání báze znalostí (pokud je báze jen jedna a indexová stránka se přeskakuje, pak se tato stránka zobrazí jako první).

Stránka musí obsahovat tlačítko pro zahájení konzultace:

<FORM action="question">
 <INPUT type="Submit" Value="Start"/>
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
Dalším vhodný „pseudo tag“ pro tuto stránka je tag pro zobrazení popisu báze znalostí:
<#BaseDescription>

dotazbinary_htm.dta

Tato stránka slouží pro položení dotazu uživateli na binární atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
  WeightOutOfRange = "Váha mimo rozsah!";
  NotWeight = "Váha není zadána!";
  NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceValue>
  <#CheckOfBinary>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro vkládání váhy: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="jistě ano" OnClick="InputValue('yes')">
<INPUT  Type="submit" Value="jistě ne" OnClick="InputValue('no')">
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknown')">

dotazsingle_htm.dta

Tato stránka slouží pro položení dotazu uživateli na jednoduchý nominální atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
   WeightOutOfRange = "Váha mimo rozsah!";
   NotWeight = "Váha není zadána!";
   NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceValue>
  <#CheckOfSingle>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro výběr odpovědi (atribut lines udává počet řádek pole): <#SelectValue lines="1">,
pole pro vkládání váhy: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="jistě ano" OnClick="InputValue('yes')">
<INPUT  Type="submit" Value="jistě ne" OnClick="InputValue('no')">
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknown')">

dotazmultiple_htm.dta

Tato stránka slouží pro položení dotazu uživateli na množinový nominální atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceMultipleValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

 <SCRIPT language="JavaScript">
   WeightOutOfRange = "Váha mimo rozsah v poli číslo ";
   NotNumber = "Zadaná hodnota není číslo!";
  <#ReplaceMultipleValue>
  <#CheckOfMultiple>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
seznam výroků s poli pro odpovědi a případnými tlačítky pro předvolené odpovědi (jsou-li uvedeny příslušné atributy): <#ListOfMultiple yesbutton="Ano" nobutton="Ne" unknownbutton="Nevim" irrelevantbutton="Irelevantní">,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí váhy: <#WeightRange>

dotaznumeric_htm.dta

Tato stránka slouží pro položení dotazu uživateli na numerický atribut.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat (tag #ReplaceValue musí být uveden pouze v případě, že stránka obsahuje tlačítka s předdefinovanými odpověďmi):

<SCRIPT language="JavaScript">
    WeightOutOfRange = "Váha mimo rozsah!";
    ValueOutOfRange = "Hodnota mimo rozsah!";
    NotNumber = "Zadaná hodnota není číslo!";
    NotValue = "Hodnota není zadána!";
  <#ReplaceValue>
  <#CheckOfNumeric>
 </SCRIPT>
Dále musí obsahovat tag pro vypsání dotazu: <#NameOfAttribute>,
začátek formuláře pro vyplnění odpovědi: <#BeginForm>,
pole pro vkládání hodnoty: <#InputValue>,
ukončení formuláře:
<INPUT Type="submit" Value="OK" class="buttonOK">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Další vhodné tagy jsou:
tag pro vypsání komentáře k atributu: <#CommentOfAttribute>
tag pro vypsání rozmezí hodnoty: <#ValueRange>
tlačítka pro vkládání předdefinovaných odpovědí:
<INPUT  Type="submit" Value="irelevantní" OnClick="InputValue('irrelevant')">
<INPUT  Type="submit" Value="Nevím" OnClick="InputValue('unknownnumeric')">

result_htm.dta

Tato stránka slouží pro zobrazení výsledků konzultace. Systém zobrazí tuto stránku, jakmile odvodí závěry konzultace.

Tato stránka by měla obsahovat tabulku s výsledky. Podoba tabulky by měla být přibližně takováto:

   <TABLE cellspacing="2" cellpadding="2">
<TR>
 <TD><b>Jméno</b></TD>
 <TD><b>Min. váha</b></TD>
 <TD><b>Max. váha</b></TD>
 <TD><b>Stav</b></TD>
</TR>
<#AllPropositionsTrue>
<#AllPropositionsNeutral>
<#AllPropositionsFalse>
</TABLE>
Tabulka nemusí obsahovat tagy pro vypsání všech výroků (#AllPropositions...), ale například jen cílů (#Results...) nebo necílových výroků (#Propositions...). Může také obsahovat jen kladné či jen záporné výroky.

Z této stránky může vést odkaz na stránku pro úpravu odpovědí: <a href="questionnaire<#id>">Upravit odpovědi</a>

questionnaire_htm.dta

Tato stránka slouží pro úpravu odpovědí. Jsou na ní zobrazeny všechny otázky a odpovědi a uživatel je může libovolně měnit. Po odeslání této stránky se opět zobrazí stránka s výsledky.

Stránka musí obsahovat následující script v hlavičce, ve kterém je možné upravit texty, které se mají uživateli zobrazovat:

<SCRIPT language="JavaScript">
    WeightOutOfRange = "Váha mimo rozsah!";
    ValueOutOfRange = "Hodnota mimo rozsah!";
    NotNumber = "Zadaná hodnota není číslo!";
    NotValue = "Hodnota není zadána!";
    NotWeight = "Vána není zadána!";
    CertainlyYes = "Jistě ano";
    CertainlyNo = "Jistě ne";
    ProbablyYes = "Asi ano";
    ProbablyNo = "Asi ne";
    Unknown = "Nevím";
    Irrelevant = "Irelevantní";
  <#ReplaceMultipleValue>
  <#CheckQuestionnaire>
  <#QuestionnaireNotNumbers>
 </SCRIPT>
Dále musí obsahovat začátek formuláře pro vyplnění odpovědi: <#BeginFormQuestionnaire>,
seznam výroků s poli pro odpovědi a případnými tlačítky pro předvolené odpovědi (jsou-li uvedeny příslušné atributy): <#Questionnaire yesbutton="Ano" nobutton="Ne" unknownbutton="Nevim" irrelevantbutton="Irelevantní">,
ukončení formuláře:
<INPUT Type="submit" Value="Odeslat">
 <INPUT Type="hidden" name="id" Value="<#id_number>">
</FORM>
 Pokud chcete, aby se nevypisovali váhy jednotlivých atributů, ale tyto váhy byly nahrazeny slovními výrazy, přidejte do tagu „<BODY>“ atribut „OnLoad="Nahrad()"“.