Aquest document es trobarà en estat d'esborrany durant un període indefinit de temps dedicat a efectuar les correccions adients.
(Els possibles errors presents es aquest document, deguts a la seva traducció, són responsabilitat del traductor i no són imputables en cap de les maneres al W3C).
Per a qualsevol comentari sobre la traducció dirigiu-vos a Fran Rosa i Soler
La versió oficial d'aquest document és la versió original (en anglès):
http://www.w3.org/MarkUp/Guide/xhtml-m12n-tutorial/
Última actualizació: $Data: 2001/08/01 19:26:28 $
Copyright ©2001 W3C® (MIT, INRIA, Keio), Tots els Drets Reservats. El W3C aplicarà les seves normes de responsabilitat, marca registrada, ús del document i llicència de software.
La Modul·larització d'XHTML proporciona un marc de treball per a la creació de nous llenguatges de marques mitjançant l'extensió dels Mòduls Centrals d'XHTML i l'ús del Marc de Treball de Mòduls XHTML. En alguns casos, es voldràn crear llenguatges de marques complets i propietaris mitjançant aquests mecanismes. En d'altres, es poden voler crear nous mòduls reutilitzables per a ser emprats per la seva organització o per d'altres en la definició de llenguatges de marques. En ambdòs casos, la mecànica dels mòduls afegits i dels lleguatges de marques definits és la mateixa. Aquest document descriu la manera en què aquests mòduls són definits, i com s'han de combinar per a crear nous llenguatges de marques.
Els Mòduls XHTML es composen de, al menys, dos mòduls - un Mòdul Qname i un Mòdul de Declaració. En aquest apartat anem a veure com es construeixen cadascun d'aquests mòduls. Al següent apartat, farem servir aquest nou mòdul amb un altre mòdul de la família XHTML i alguns mòduls Centrals d'XHTML per a definir un nou llenguatge de marques.
La construcció d'un Mòdul Qname XHTML ha de seguir el procés següent:
<!ENTITY % MODULE.myelement.qname "%MODULE.pfx;myelement" >
Si el mòdul afegeix atributs a elements definits en mòduls que no comparteixen l'espai de nom d'aquest mòdul, s'han de declarar els atributs de manera que aquests facin servir el prefix %MODULE.pfx. Exemple:
<ENTITY % MODULE.img.myattr.qname "%MODULE.pfx;myattr" >
La construcció d'un Mòdul de Declaració XHTML ha de seguir el procès següent:
És possible que desitgi tenir un mòdul XHTML que serveixi també com DTD interna. Un bon exemple pot ser un mòdul que defineixi les parts d'un inventari. Aquestes parts han de poder ser incloses en un document XHTML, perè també han d'estar disponibles com arxius independents a, per exemple, una base de dades. La manera més fàcil d'aconseguir-ho és definint un arxiu DTD que introdueixi els components del mòdul. Una DTD d'aquest tipus haurà de tenir la següent estructura:
Nomès poden fer referència a aquesta DTD els documents que facin servir nomès els elements del teu mòdul.
Un cop hagis definit el/s teu/s mòdul/s, voldràs combinar-los amb XHTML i amb altres mòduls per a crear un nou llenguatge de marques. L'únic que has de fer per a construir un llenguatge de marques mitjançant DTDs, és definir una DTD que reflexi el llenguatge de marques. Respecte a aquest tema, anem a explorar el procès per a crear un "llenguatge de marques híbrid".
Un Mòdul Model es un Mòdul XHTML que defineix el model de contingut per al teu nou llenguatge de marques. Aquest mòdul pot ser extremadament compexe, o tan simple com la declaració d'una entitat paràmetre i la inclusió d'altres Mòduls Model. Sigui com sigui, l'objectiu és el mateix: definir l'estructura de tots els elements al teu llenguatge de marques.
El teu llenguatge de marques pot incloure un o més Mòduls de la família XHTML. Cadascun d'aquests mòduls tindrà un Mòdul Qname. La col·lecció de noms qualificats és un mùl al qual s'introdueixien tots els Mòduls Qname, i es defineixen tots els atributs prefixats. Específicament, una col·lecció de noms qualificats conté:
El driver es l'arxiu al que fan referència els documents escrits amb el teu llenguatge de marques. El driver pot ser simple o complexe, depenent del llenguatge de marques. Sigui com sigui, el driver de cada llenguatge de marques de la família XHTML ha de contindreels següents elements ordenats per a funcionar correctament:
Ara ja ho tenim tot enllestit. Pots fer referència al teu nou llenguatge de marques definit mitjançant DTDs a la declaració DOCTYPE (de tipus de document) d'un document, i aquest pot ser validat segons el teu DTD mitjançant eines comercials o de lliure distribució.
Als següents apartats, veurem exemples de cadascun dels tipus de mòdul dels què hem estat parlant fins ara, així com dels components que formen dos definicions diferents de llenguatges de marques.
El primer dels mòduls qname que veurem a continuació correspon a un mòdul inventari. El segon correspon a algunes extensions del mòdul inventari.
<!-- ...................................................................... --> <!-- Mòdul Qname Inventari ................................................... --> <!-- arxiu: inventory-qname-1.mod PUBLIC "-//COMPANYIA//ELEMENTS XHTML Qnames d'Inventari 1.0//EN" SYSTEM "http://www.my.org/DTDs/inventory-qname-1.mod" xmlns:inventory="http://www.my.org/xmlns/inventory" ...................................................................... --> <!-- Declara el valor per defecte del prefixat en aquest mòdul --> <!-- Adoni-se'n que NS.prefixed no serà tingut en compte pel Marc de Treball d'XHTML o per una instància de document. --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % Inventory.prefixed "%NS.prefixed;" > <!-- Declara l'Espai de Nom útil per a aquest mòdul --> <!ENTITY % Inventory.xmlns "http://www.my.org/xmlns/inventory" > <!-- Declara el prefix per defecte d'aquest mòdul --> <!ENTITY % Inventory.prefix "inventory" > <!-- Declara el prefix i tots els espais de nom amb prefix necessaris per a aquest mòdul --> <![%Inventory.prefixed;[ <!ENTITY % Inventory.pfx "%Inventory.prefix;:" > <!ENTITY % Inventory.xmlns.extra.attrib "xmlns:%Inventory.prefix; %URI.datatype; #FIXED '%Inventory.xmlns;'" > ]]> <!ENTITY % Inventory.pfx "" > <!ENTITY % Inventory.xmlns.extra.attrib "" > <!ENTITY % XHTML.xmlns.extra.attrib "%Inventory.xmlns.extra.attrib;" > <!ENTITY % Inventory.shelf.qname "%Inventory.pfx;shelf" > <!ENTITY % Inventory.item.qname "%Inventory.pfx;item" > <!ENTITY % Inventory.desc.qname "%Inventory.pfx;desc" > <!ENTITY % Inventory.sku.qname "%Inventory.pfx;sku" > <!ENTITY % Inventory.price.qname "%Inventory.pfx;price" >
<!-- ...................................................................... --> <!-- Extensions del Mòdul Qname Inventari ............................................... --> <!-- arxiu: extension-qname-1.mod xmlns:invext="http://www.my.org/xmlns/invext" ...................................................................... --> <!-- Declara el valor per defecte del prefixat als elements d'aquest mòdul --> <!-- Adoni-se'n que NS.prefixed no serà tingut en compte pel Marc de Treball d'XHTML o per una instància de document. --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % Extension.prefixed "%NS.prefixed;" > <!-- Declara l'Espai de Nom útil per a aquest mòdul --> <!ENTITY % Extension.xmlns "http://www.my.org/xmlns/invext" > <!-- Declara el prefix per defecte d'aquest mòdul --> <!ENTITY % Extension.prefix "invext" > <!-- Declara el prefix i tots els espais de nom amb prefix necessaris per a aquest mòdul --> <![%Extension.prefixed;[ <!ENTITY % Extension.pfx "%Extension.prefix;:" > <!ENTITY % Extension.xmlns.extra.attrib "xmlns:%Extension.prefix; %URI.datatype; #FIXED '%Extension.xmlns;'" > ]]> <!ENTITY % Extension.pfx "" > <!ENTITY % Extension.xmlns.extra.attrib "" > <!ENTITY % Extension.store.qname "%Extension.pfx;store" > <!ENTITY % Extension.aisle.qname "%Extension.pfx;aisle">
El primer mòdul de declaración es para los elementos del mòdul inventario. El segundo para los elementos de extensión
<!-- ...................................................................... --> <!-- Mòdul d'Elements d'Inventari ................................................... --> <!-- arxiu: inventory-1.mod PUBLIC "-//COMPANYIA//ELEMENTS XHTML Elements d'Inventari 1.0//EN" SYSTEM "http://www.my.org/DTDs/inventory-1.mod" xmlns:inventory="http://www.my.org/xmlns/inventory" ...................................................................... --> <!-- Mòdul Inventari item sku desc price Aquest mòdul defineix l'estructura simple d'un article de l'inventari --> <!-- Defineix els atributs generals de l'espai de nom --> <![%Inventory.prefixed;[ <!ENTITY % Inventory.xmlns.attrib "%NS.decl.attrib;" > ]]> <!ENTITY % Inventory.xmlns.attrib "%NS.decl.attrib; xmlns %URI.datatype; #FIXED '%Inventory.xmlns;'" > <!ELEMENT %Inventory.shelf.qname; ( %Inventory.item.qname; )* > <!ATTLIST %Inventory.shelf.qname; location CDATA #IMPLIED %Inventory.xmlns.attrib; > <!ELEMENT %Inventory.item.qname; ( %Inventory.desc.qname;, %Inventory.sku.qname;, %Inventory.price.qname;) > <!ATTLIST %Inventory.item.qname; location CDATA #IMPLIED %Inventory.xmlns.attrib; > <!ELEMENT %Inventory.desc.qname; ( #PCDATA ) > <!ATTLIST %Inventory.desc.qname; %Inventory.xmlns.attrib; > <!ELEMENT %Inventory.sku.qname; ( #PCDATA ) > <!ATTLIST %Inventory.sku.qname; %Inventory.xmlns.attrib; > <!ELEMENT %Inventory.price.qname; ( #PCDATA ) > <!ATTLIST %Inventory.price.qname; %Inventory.xmlns.attrib; > <!-- final d'inventory-1.mod -->
<!-- ...................................................................... --> <!-- Extensions del Mòdul d'Elements ................................................... --> <!-- arxiu: extension-1.mod SYSTEM "extension-1.mod" xmlns:invext="http://www.my.org/xmlns/invext" ...................................................................... --> <!-- Mòdul de Extensió store aisle Aquest mòdul defineix una extensió per a l'estructura de l'inventari --> <!-- Defineix els atributs generals de l'espai de nom --> <![%Extension.prefixed;[ <!ENTITY % Extension.xmlns.attrib "%NS.decl.attrib;" > ]]> <!ENTITY % Extension.xmlns.attrib "%NS.decl.attrib; xmlns %URI.datatype; #FIXED '%Extension.xmlns;'" > <!ELEMENT %Extension.store.qname; ( %Extension.aisle.qname; )* > <!ATTLIST %Extension.store.qname; name CDATA #IMPLIED %Extension.xmlns.attrib; > <!ELEMENT %Extension.aisle.qname; ( %Inventory.shelf.qname; )* > <!ATTLIST %Extension.aisle.qname; number CDATA #IMPLIED %Extension.xmlns.attrib; > <!-- final d'extension-1.mod -->
Aquest llenguatge de marques compleix tots els requisits per a ser un llenguatge de marques de la família XHTML. Fa servir els Mòduls Centrals d'XHTML, i els amplia amb els Mòduls Inventari i les extensions del Mòdul Inventari definides abans.
<!-- Introdueix els noms qualificats de l'inventari --> <!ENTITY % Inventory-qname.mod PUBLIC "-//COMPANYIA//ENTITATS XHTML Qnames d'Inventari 1.0//EN" "inventory-qname-1.mod" > %Inventory-qname.mod; <!-- Introdueix el mòdul d'extensió local --> <!ENTITY % Extension-qname.mod SYSTEM "extension-qname-1.mod" > %Extension-qname.mod; <!-- Defineix els atributs d'extensió d'xmlns --> <!ENTITY % XHTML.xmlns.extra.attrib "%Inventory.xmlns.extra.attrib; %Extension.xmlns.extra.attrib;" >
<!-- ...................................................................... --> <!-- Mòdul Model d'Extensió d'Inventari .................................... --> <!-- arxiu: xhtml-invext-model-1.mod SYSTEM "xhtml-invext-model-1.mod" ...................................................................... --> <!-- Defineix el contingut model per a Misc.extra --> <!ENTITY % Misc.class "| %script.qname; | %noscript.qname; | %Extension.store.qname; "> <!-- .................... Elements Inline (en línia) ...................... --> <!ENTITY % HeadOpts.mix "( %meta.qname; )*" > <!ENTITY % I18n.class "" > <!ENTITY % InlStruct.class "%br.qname; | %span.qname;" > <!ENTITY % InlPhras.class "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname; | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname; | %abbr.qname; | %acronym.qname; | %q.qname;" > <!ENTITY % InlPres.class "| %tt.qname; | %i.qname; | %b.qname; | %big.qname; | %small.qname; | %sub.qname; | %sup.qname;" > <!ENTITY % Anchor.class "| %a.qname;" > <!ENTITY % InlSpecial.class "| %img.qname; " > <!ENTITY % Inline.extra "" > <!-- %Inline.class; inclou tots els elements en línia, fets servir com a components en mescles --> <!ENTITY % Inline.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %Anchor.class; %InlSpecial.class;" > <!-- %InlNoAnchor.class; inclou tots els elements en línia que no són àncores, fets servir com a components en mescles --> <!ENTITY % InlNoAnchor.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %InlSpecial.class;" > <!-- %InlNoAnchor.mix; inclou tots els elements en línia que no són àncores --> <!ENTITY % InlNoAnchor.mix "%InlNoAnchor.class; %Misc.class;" > <!-- %Inline.mix; inclou tots els elements en línia, %Misc.class; inclòs --> <!ENTITY % Inline.mix "%Inline.class; %Misc.class;" > <!-- ..................... Elements Block (en bloc) ...................... --> <!ENTITY % Heading.class "%h1.qname; | %h2.qname; | %h3.qname; | %h4.qname; | %h5.qname; | %h6.qname;" > <!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" > <!ENTITY % Blkstruct.class "%p.qname; | %div.qname;" > <!ENTITY % Blkphras.class "| %pre.qname; | %blockquote.qname; | %address.qname;" > <!ENTITY % Blkpres.class "| %hr.qname;" > <!ENTITY % Block.extra "" > <!-- %Block.class; inclou tots els elements en bloc, fets servir com a components en mescles --> <!ENTITY % Block.class "%Blkstruct.class; %Blkphras.class; %Blkpres.class; %Block.extra;" > <!-- %Block.mix; inclou tots els elements en bloc més %Misc.class; --> <!ENTITY % Block.mix "%Heading.class; | %List.class; | %Block.class; %Misc.class;" > <!-- ................ Tots els Elements de Contingut .................. --> <!-- %Flow.mix; inclou tot el contingut de text, en bloc i en línia --> <!ENTITY % Flow.mix "%Heading.class; | %List.class; | %Block.class; | %Inline.class; %Misc.class;" > <!-- final d'xhtml-invext-model-1.mod -->
<!-- ....................................................................... --> <!-- DTD d'Extensió d'Inventari .............................................. --> <!-- arxiu: xhtml-invext-1.dtd --> <!-- Aquest és el DTD Driver per a la versió 1.0 de l'inventari. Si us plau, fes servir aquest identificador públic formal per identificar-ho: "-//COMPANYIA//DTD XHTML Inventari Extensió 1.0//EN" I aquest espai de nom per als elements d'extensió: xmlns:inventory="http://www.my.org/xmlns/invext" S'inclouen també altres espais de nom. --> <!ENTITY % XHTML.version "-//COMPANYIA//DTD XHTML Inventari Extensió 1.0//EN" > <!-- Defineix el mòdul de noms qualificats d'XHTML per a que siguin nostres --> <!ENTITY % xhtml-qname-extra.mod SYSTEM "xhtml-invext-qname-1.mod" > <!-- Reservat pel seu ús a perfils de document --> <!ENTITY % XHTML.profile "" > <!-- Defineix el Contingut Model per al marc de treball que es farà servir --> <!ENTITY % xhtml-model.mod SYSTEM "xhtml-invext-model-1.mod" > <!-- Desactiva el suport per a text bidireccional --> <!ENTITY % XHTML.bidi "INCLUDE" > <!-- Introdueix el Marc de Treball d'XHTML --> <!ENTITY % xhtml-framework.mod PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod" > %xhtml-framework.mod; <!-- Mòdul Text (Necessari) ............................... --> <!ENTITY % xhtml-text.mod PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod" > %xhtml-text.mod; <!-- Mòdul Hypertext (Necessari) ................................. --> <!ENTITY % xhtml-hypertext.mod PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod" > %xhtml-hypertext.mod; <!-- Mòdul Llistes (Necessari) .................................... --> <!ENTITY % xhtml-list.mod PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod" > %xhtml-list.mod; <!-- Mòdul Inventari ........................................ --> <!ENTITY % Inventory-elements.mod SYSTEM "inventory-1.mod" > %Inventory-elements.mod; <!-- Mòdul d'Extensió d'Inventari .............................. --> <!ENTITY % Invext-elements.mod SYSTEM "extension-1.mod" > %Invext-elements.mod; <!-- Mòdul Imatges XHTML ........................................ --> <!ENTITY % xhtml-image.mod PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" > %xhtml-image.mod; <!-- Mòdul Metainformació de Document ............................ --> <!ENTITY % xhtml-meta.mod PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN" "xhtml-meta-1.mod" > %xhtml-meta.mod; <!-- Mòdul Estructura de Document (Necessari) ....................... --> <!ENTITY % xhtml-struct.mod PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod" > %xhtml-struct.mod;
Aquest exemple fa servir el nou llenguatge de marques en el seu mode per defecte - sense prefixos definits per cap dels mòduls.
<!DOCTYPE html SYSTEM "xhtml-invext-1.dtd" > <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Exemple fent servir els valors per defecte</title> </head> <body> <p>Contingut de l'espai de nom XHTML</p> <shelf> <item> <desc> això és una descripció. </desc> <sku> això és l'sku </sku> <price> això és el preu. </price> </item> </shelf> </body> </html>
Aquest exemple fa servir el nou llenguatge de marques amb els prefixos activats nomès per als components d'inventari i les seves extensions.
<!DOCTYPE html SYSTEM "xhtml-invext-1.dtd" [ <!ENTITY % Inventory.prefixed "INCLUDE"> <!ENTITY % Inventory.prefix "i"> ]> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:i="http://www.my.org/xmlns/inventory" > <head> <title>Exemple fent servir prefixes</title> </head> <body> <p>Contingut de l'espai de nom XHTML</p> <i:shelf> <i:item> <i:desc> això és una descripció. </i:desc> <i:sku> això és l'sku. </i:sku> <i:price> això és el preu. </i:price> </i:item> </i:shelf> </body> </html>
Aquest exemple afegeix un prefixe a tots els elements.
<!DOCTYPE x:html SYSTEM "xhtml-invext-1.dtd" [ <!ENTITY % NS.prefixed "INCLUDE"> <!ENTITY % XHTML.prefix "x" > <!ENTITY % Inventory.prefix "i"> ]> <x:html xmlns:x="http://www.w3.org/1999/xhtml" xmlns:i="http://www.my.org/xmlns/inventory" > <x:head> <x:title>Exemple fent servir prefixes</x:title> </x:head> <x:body> <x:p>Contingut de l'espai de nom XHTML</x:p> <i:shelf> <i:item> <i:desc> això és una descripció. </i:desc> <i:sku> això és l'sku. </i:sku> <i:price> això és el preu. </i:price> </i:item> </i:shelf> </x:body> </x:html>