Capítol 3. Creació d'entrades del menú

Quan creeu un connector nou, haureu de dir-li-ho al RKWard. Per tant, el primer que cal fer és escriure un fitxer .pluginmap (o modificar-ne un d'existent). El format del .pluginmap és XML. Us ensenyaré un exemple (també, per descomptat, assegureu-vos que el RKWard està configurat per a carregar el .pluginmap: ArranjamentConfigura el RKWardConnectors):

Suggeriment

Després de llegir aquest capítol, mireu també el paquet rkwarddev. Proporciona algunes funcions de l'R per a crear la majoria de les etiquetes XML del RKWard.

<!DOCTYPE rkpluginmap>
        

El «doctype» no s'interpreta realment, però de totes maneres es defineix com a "rkpluginmap".

<document base_prefix="" namespace="myplugins" id="mypluginmap">
        

Es pot utilitzar l'atribut base_prefix, si tots els connectors resideixen en un directori comú. Bàsicament, aleshores podeu ometre aquest directori dels noms de fitxers especificats a continuació. És segur deixar això com a "".

Com podeu veure a continuació, tots els connectors tenen un identificador únic, id. El namespace és una manera d'organitzar aquests ID, i fer que sigui menys probable crear accidentalment un identificador duplicat. Internament, s'anteposa l'espai de noms i després un «::» a tots els identificadors que especifiqueu en aquest .pluginmap. En general, si teniu la intenció de distribuir els connectors en un paquet R, és una bona idea utilitzar el nom del paquet com a paràmetre namespace. Els connectors enviats amb la distribució oficial del RKWard tenen el namespace="rkward".

L'atribut id és opcional, però especificar un identificador per al vostre .pluginmap fa possible que altres persones facin que el seu .pluginmap carreguin automàticament el vostre .pluginmap (vegeu la secció sobre dependències).

<components>
        

Components? No estem parlant de connectors? Sí, però en el futur, els connectors no seran més que una classe especial de components. El que fem aquí, és registrar tots els components/connectors en el RKWard. Vegem una entrada d'exemple:

<component type="standard" id="t_test_two_vars" file="t_test_two_vars.xml" label="Two Variable t-Test" />
        

Primer l'atribut type: deixeu-ho com a "standard" per ara. Encara no s'han implementat altres tipus. L'id que ja hem indicat. A cada component se li ha de donar un identificador únic (en el seu espai de noms). Trieu-ne un que sigui fàcilment reconeixible. Eviteu espais i qualsevol caràcter especial. Fins ara no estan prohibits, però podrien tenir significats especials. Amb l'atribut file, especifiqueu on es troba la descripció del connector real. Això és relatiu al directori on es troba el fitxer .pluginmap, i el base_prefix anterior. Finalment, doneu una etiqueta al component. Aquesta etiqueta es mostrarà on es col·loqui el connector al menú (o en el futur potser també en altres llocs).

Normalment, un fitxer de .pluginmap contindrà diversos components, de manera que aquí en trobareu alguns més:

<component type="standard" id="unimplemented_test" file="means/unimplemented.xml" />
                <component type="standard" id="fictional_t_test" file="means/ttests/fictional.xml" label="This is a fictional t-test" />
                <component type="standard" id="descriptive" file="descriptive.xml" label="Descriptive Statistics" />
                <component type="standard" id="corr_matrix" file="corr_matrix.xml" label="Correlation Matrix" />
                <component type="standard" id="simple_anova" file="simple_anova.xml" label="Simple Anova" />
        </components>
        

D'acord, aquest ha estat el primer pas. Ara el RKWard coneix que aquests connectors existeixen. Però com invocar-los? S'han de col·locar en una jerarquia de menús:

<hierarchy>
                <menu id="analysis" label="Analysis">
        

Just a sota de l'etiqueta <hierarchy>, comenceu a descriure, en quin <menu> haurien d'anar els vostres connectors. Amb la línia anterior, bàsicament dieu que el vostre connector hauria d'estar en el menú Analysis (no necessàriament directament allà, sinó en un submenú). El menú Analysis és estàndard en el RKWard, de manera que en realitat no s'ha de crear des de zero. Tanmateix, si encara no existís, utilitzant l'atribut label li donaríeu el seu nom. Finalment, l'id identifica de nou aquest <menu>. Això és necessari, de manera que diversos fitxers del .pluginmap poden col·locar els seus connectors en els mateixos menús. Ho fan buscant un <menu> amb l'id donat. Si l'ID encara no existeix, es crearà un menú nou. En cas contrari, les entrades s'afegiran al menú existent.

<menu id="means" label="Means">
        

Bàsicament, aquí és el mateix: ara definim un submenú al menú Analysis. Es diu Means).

<menu id="ttests" label="t-Tests">
        

I un nivell final en la jerarquia del menú: un submenú del submenú Means.

<entry component="t_test_two_vars" />
        

Ara, finalment, aquest és el menú en què volem col·locar el connector. L'etiqueta <entry> indica que aquesta és realment la cosa real, en lloc d'un altre submenú. L'atribut component es refereix a l'id que heu donat al connector/component anterior.

<entry component="fictional_t_test" />
                                </menu>
                                <entry component="fictional_t_test" />
                        </menu>
                        <menu id="frequency" label="Frequency" index="2"/>
        

En el cas que us hàgiu perdut: aquest és un altre submenú al menú Analysis. Vegeu la captura de pantalla següent. S'ometran algunes de les coses que no són visibles, marcades amb [...].

[...]
                        </menu>
                        <entry component="corr_matrix"/>
                        <entry component="descriptive"/>
                        <entry component="simple_anova"/>
                </menu>
        

Aquestes són les entrades finals visibles en les captures de pantalla de sota.

<menu id="plots" label="Plots">
                        [...]
                </menu>
        

Per descomptat, també podeu col·locar els vostres connectors en menús diferents d'Analysis.

<menu id="file" label="File">
                        [...]
                </menu>
        

Fins i tot en menús estàndard com Fitxer. Tot el que necessiteu és l'id correcte.

</hierarchy>        
</document>
        

Així és com es fa. I aquesta captura de pantalla mostra el resultat:

Jerarquia de menú creada pel codi mostrat anteriorment

És confús? La manera més fàcil d'iniciar-se és probablement prenent alguns dels fitxers existents del .pluginmap enviats amb la distribució, i modificant-los segons les vostres necessitats. A més, si necessiteu ajuda, no dubteu a escriure a la llista de correu de desenvolupament.

Control de l'ordre de les entrades del menú

De manera predeterminada, tots els elements (entrades/submenús) dins d'un menú s'ordenaran alfabèticament, automàticament. En alguns casos, és possible que vulgueu més control. En aquest cas podeu agrupar elements de la manera següent:

  • Podeu definir grups dins de qualsevol menú com aquest. Tots els elements que pertanyin al mateix grup s'agruparan junts:

    <group id="somegroup"/>
                                    
  • Si voleu que el grup estigui visualment separat d'altres entrades, utilitzeu:

    <group id="somegroup" separated="true"/>
                                    
  • Les entrades, menús i grups es poden afegir a un grup especificat, utilitzant:

    <entry component="..." group="somegroup"/>
                                    
  • De fet, també és possible definir grups (sense línies de separació) implícitament:

    <entry component="first" group="a"/>
                    <entry component="third"/>
                    <entry component="second" group="a"/>
                                    
  • Els noms dels grups són específics de cada menú. El grup «a» al menú «Data» no entra en conflicte amb el grup «a» del menú «Analysis», per exemple.

  • El cas d'ús més comú és definir grups a la part superior, o a la part inferior d'un menú. Per això, hi ha grups predefinits "top" i "bottom" a cada menú.

  • Les entrades dins de cada grup estan ordenades alfabèticament. Els grups apareixen en l'ordre de declaració (llevat que s'afegeixi a un altre grup, per descomptat).

  • Els menús i les entrades sense especificació de grup formen lògicament un grup ("").