Nous avons vu comment créer des formulaires rudimentaires, fonctionnels et pratiques, mais nous sommes encore loin d'avoir épuisé toutes les possibilités de l'extension Formulaires Sémantiques.
Dans ce chapitre, nous allons voir en détail un certain nombre de paramètres qui vous permettront de mieux adapter vos formulaires au genre de données que vous voulez utiliser dans votre wiki, et nous reviendrons sur la fonction #forminput pour faciliter la création de nouvelles pages.
Formulaire.
Les pages de formulaires sont composés de plusieurs parties que nous avons décrites précédemment ; nous allons maintenant voir comment configurer ce qui concerne les champs.
Paramètres d'utilisation des modèles (« for template »).
« for template » (littéralement : "pour le modèle") est la balise qui permet d'indiquer quel modèle doit être utilisé dans le formulaire : les champs du formulaire correspondront aux paramètres de ce modèle. On écrira ainsi :
Les autres paramètres de cette balise sont :
Configuration des champs (« field »).
« field » définit un champ correspondant à un paramètre du modèle indiqué dans « for template ».
C'est la balise qui comporte le plus de paramètres, mais les paramètres possibles varient selon le type de champ (listes, cases à cocher, etc). Nous en donnons une liste commentée ci-dessous.
Paramètres généraux.
Ces paramètres sont valables pour tous les champs.
Configurations complexes.
Nous plaçons à part les configurations des champs qui suivent car elles demandent des explications détaillés.
Champ pour ajouter des pages avec un formulaire (#forminput).
Nous avons déjà rencontré la fonction #forminput dans l'en-tête des pages de formulaires, et nous avons dit que cette fonction permet d'afficher un champ dans lequel on entre le nom d'une page que l'on veut modifier avec un formulaire. Nous allons voir que cette fonction comporte de nombreux paramètres très utiles, par exemple pour ajouter un champ « ajouter une œuvre » sous une liste bibliographique.
Voici tous les paramètres que nous allons expliquer :
codice_36
Nous commencerons par les plus simples :

Mathc gnuplot/Présentation de la librairie

Préambule.
La géométrie de la tortue dans Wikipedia.
Dans ce chapitre, nous présenterons un exemple (c01.c) et la librairie (*.h). 
Le code des fonctions de la librairie ne sont pas à étudier. 
Dans un premier temps, amusez-vous simplement avec ces fonctions.
L'étude de ce chapitre peut ce faire à l'aide de cette [Playlist]..
Présentation.
Dessiner.
/* Save as : c01.c */
int main(void)
double **U = GINIT(-10.,10.,-10.,10.);
int i = 4;
 clrscrn();
 for(;i--;)
 F_mR(U);
 printf(" * open the file main.plt with Gnuplot.\n\n\n");
 getchar();
 return 0;
Le résultat :
 # Gnuplot file : load "a_main.plt"
 set zeroaxis
 set size ratio -1
 plot [-10.000:10.000] [-10.000:10.000] \
 "data.plt" with linesp pt 0
Les fichiers h partagés.
/* Save as : v_a.h */
/* ------------------------------------ */
/* Save as : vdefine.h */
void clrscrn(void)
 printf("\n\n\n\n\n\n\n\n\n\n\n"
 "\n\n\n\n\n\n\n\n\n\n\n"
 "\n\n\n\n\n\n\n\n\n\n\n");
L'étude sur les matrices fait partie d'un autre livre.
/* Save as : vmatini.h */
double **I_mR(
int r,
int c
int i = R0;
int ar = r + C1;
int ac = c + C1;
double **A = malloc(ar * sizeof(*A));
 for(; i<ar; i++)
 A[i] = malloc(ac * sizeof(**A));
 A[R_SIZE][OF] = ar;
 A[C_SIZE][OF] = ac;
return(A);
/* ------------------------------------ */
void F_mR(
double **A
int i=R0;
int r=A[R_SIZE][OF];
 if(A) for(;i<r;i++) free(A[i]);
 free(A);
/* Save as : vmatbas.h */
double **add_mR(
double **A,
double **B,
double **AplsB
int r;
int c;
 for (r=FIRST;r<A[R_SIZE][OF];r++)
 for(c=FIRST;c<A[C_SIZE][OF];c++)
 AplsB[r][c]=A[r][c]+B[r][c];
return(AplsB);
/* ------------------------------------ */
double **mul_mR(
double **A,
double **B,
double **AB
int i,j,k;
 for (k=FIRST; k<A[R_SIZE][OF];k++)
 for (j=FIRST; j<B[C_SIZE][OF];j++)
 for(i=FIRST,AB[k][j]=0;i<A[C_SIZE][OF];i++)
 AB[k][j]+=A[k][i]*B[i][j];
return(AB);
/* Save as : vmatcop.h */
double ** c_mR(
double **A,
double **B
int r;
int c;
for( r=FIRST;r<A[R_SIZE][OF];r++)
 for(c=FIRST;c<A[C_SIZE][OF];c++)
 B[r][c]=A[r][c];
return(B);
/* ------------------------------------ */
double **c_a_A_mR(
double a[],
double **A
int r;
int c;
int i=0;
for( r=FIRST; r<A[R_SIZE][OF]; r++)
 for(c=FIRST; c<A[C_SIZE][OF]; c++)
 A[r][c] = a[i++];
return(A);
/* Save as : vmatrot.h */
double **rot2D_mR(
double **A,
double alpha
 A[1][1]=cos(alpha);A[1][2]=-sin(alpha);
 A[2][1]=sin(alpha);A[2][2]= cos(alpha);
return(A);
/* Save as : y_o.h */
void PD(
double **A
FILE * fp = fopen("data.plt","a");
fprintf(fp," %+.3f %+.3f \n",
 A[R1][C1],A[R2][C1]);
 fclose(fp);
/* ------------------------------------ */
void PU(
double **A
FILE *fp = fopen("data.plt","a");
fprintf(fp,"\n %+.3f %+.3f \n",
 A[R1][C1],A[R2][C1]);
 fclose(fp);
/* ------------------------------------ */
double **Ginit(
double **U,
double xmin,
double xmax,
double ymin,
double ymax
FILE *fp;
 fp = fopen("a_main.plt","w");
fprintf(fp,"# Gnuplot file : load \"a_main.plt\" \n"
 "reset\n" 
 "set zeroaxis\n" 
 "set size ratio -1\n" 
 "plot [%0.3f:%0.3f] [%0.3f:%0.3f] \\\n"
 "\"data.plt\" with linesp pt 0\n"
 ,xmin,xmax,ymin,ymax);
 fclose(fp);
 fp = fopen("data.plt","w");
 fclose(fp);
 U[R0][C1] = 0.;/* angle */
 U[R1][C1] = 0.;/* x */
 U[R2][C1] = 0.;/* y */
 PD(U);
return(U);
/* ------------------------------------ */
double **GINIT(
double xmin,
double xmax,
double ymin,
double ymax
return( Ginit(I_mR(R2,C1),xmin,xmax,ymin,ymax) );
/* ------------------------------------ */
void SET(
double **U,
double angle,
double x,
double y
 U[R0][C1] = angle;
 U[R1][C1] = x;
 U[R2][C1] = y;
 PD(U);
/* ------------------------------------ */
void SETUP(
double **U,
double angle,
double x,
double y
 U[R0][C1] = angle;
 U[R1][C1] = x;
 U[R2][C1] = y;
 PU(U);
/* ------------------------------------ */
void GO(
double **U,
double Step
double **T = I_mR(R2,C2);
double **B = I_mR(R2,C1);
double **C = I_mR(R2,C1);
double angle=U[R0][C1];
 B[R1][C1] = 0.;
 B[R2][C1] = Step;
 rot2D_mR(T,PI/180.*(-angle));
 mul_mR(T,B,C);
 c_mR(U,B);
 add_mR(B,C,U);
 PD(U);
F_mR(C);
F_mR(B);
F_mR(T);
/* ------------------------------------ */
void GU(
double **U,
double Step
double **T = I_mR(R2,C2);
double **B = I_mR(R2,C1);
double **C = I_mR(R2,C1);
double angle=U[R0][C1];
 B[R1][C1] = 0.;
 B[R2][C1] = Step;
 rot2D_mR(T,PI/180.*(-angle));
 mul_mR(T,B,C);
 c_mR(U,B);
 add_mR(B,C,U);
 PU(U);
F_mR(C);
F_mR(B);
F_mR(T);
/* ------------------------------------ */
void TU(
double **U,
double angle
 U[R0][C1]+=angle;

MediaWiki sémantique/Ressources
Manuel de Formulaires sémantiques.
Ce manuel est substantiel, mais tout n'est pas toujours expliqué en détail ; de plus, la présentation est plus analytique que pédagogique. Très utile pour avoir des descriptions de telle ou telle fonction, un débutant risque de ne pas s'y retrouver.