<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//pt_BR">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.17">
 <META NAME="LFCATEGORY" CONTENT="Applications">
<!-- this is used be a number of tools:
 =LF=AUTHOR: Egon Willighagen
 =LF=CAT___: Applications
 =LF=TITLE_: Usando o XML e o XSLT para construir o LinuxFocus.org(/Nederlands)
 =LF=NUMBER: 206
 =LF=ANAME_: article206.shtml
 -->
 <TITLE>lf206, Applications: Usando o XML e o XSLT para construir o LinuxFocus.org(/Nederlands)</TITLE>
<!-- stylesheet added by lfparser: --> 
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-familiy:monospace,Courier }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ;  text-align:center }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar -->
 <!-- top navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="144"><IMG src="../../common/images/logolftop.gif"
           alt="[LinuxFocus-icon]" width="350" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD">In&iacute;cio</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD">Mapa</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD">&Iacute;ndice</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.shtml"><FONT color=
                 "#DDDDDD">Procura</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Novidades</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Arquivos</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../Links/index.shtml"><FONT color=
           "#FFFFFF">Links</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">Sobre LF</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Este artigo est&aacute; dispon&iacute;vel em: <A href="../../English/September2001/article206.shtml">English</a> &nbsp;<A href="../../Castellano/September2001/article206.shtml">Castellano</a> &nbsp;<A href="../../Deutsch/September2001/article206.shtml">Deutsch</a> &nbsp;<A href="../../Francais/September2001/article206.shtml">Francais</a> &nbsp;<A href="../../Italiano/September2001/article206.shtml">Italiano</a> &nbsp;<A href="../../Nederlands/September2001/article206.shtml">Nederlands</a> &nbsp;<A href="../../Portugues/September2001/article206.shtml">Portugues</a> &nbsp;<A href="../../Russian/September2001/article206.shtml">Russian</a> &nbsp;<A href="../../Turkce/September2001/article206.shtml">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 

<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0 hspace=4 vspace=4 WIDTH="30%" >
<TR>
<TD>

<!-- 2pdaIgnoreStart -->
<!-- PALM DOC -->
<TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD>
<font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font>
</TD> </TR> </TABLE>
<!-- END PALM DOC -->
<!-- 2pdaIgnoreStop -->
<br>
<IMG src="../../common/images/EgonWillighagen.jpg" alt="[Photo of the Author]" height="102" width="79">
<BR>por  <A href="mailto:egonw&#64;linuxfocus.org">Egon Willighagen</A>
<BR><BR>
<I>Sobre o autor:</I><BR>
<P>Este ano receber&aacute; o seu mestrado e come&ccedil;ar&aacute; o seu doutoramento em
quimiometria. Gosta ainda imenso de basketball como gosta do LinuxFocus e
do Linux em geral.

    
<BR><i>Conte&uacute;do</i>:
<UL>
  <LI><A HREF="#206lfindex0">Introdu&ccedil;&atilde;o</A></LI>
  <LI><A HREF="#206lfindex1">O Tipo de Defini&ccedil;&atilde;o do Documento (DTD)</A></LI>
  <LI><A HREF="#206lfindex2">&lt;database&gt;</A></LI>
  <LI><A HREF="#206lfindex3">&lt;themes&gt;</A></LI>
  <LI><A HREF="#206lfindex4">&lt;issues&gt;</A></LI>
  <LI><A HREF="#206lfindex5">&lt;persons&gt;</A></LI>
  <LI><A HREF="#206lfindex6">&lt;articles&gt;</A></LI>
  <LI><A HREF="#206lfindex7">Gerar automaticamente as p&aacute;ginas web</A></LI>
  <LI><A HREF="#206lfindex8">Localizando</A></LI>
  <LI><A HREF="#206lfindex9">Planos Futuros</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=206&lang=pt">Forma de respostas para este artigo</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2>Usando o XML e o XSLT para construir o LinuxFocus.org(/Nederlands)</H2>
 <IMG src="../../common/images/illustration206.jpg" alt="[Illustration]" hspace="10" width="102" height="38">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Abstrato</i>:
<P>

      Este artigo cont&eacute;m a apresenta&ccedil;&atilde;o dada no encontro de software livre
em Bord&eacute;us em Julho. Explica a base de dados XML utilizada para gerar
automaticamente o site da LinuxFocus.org(/Nederlands).

    </P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


    <A NAME="206lfindex0">&nbsp;</A>
<H2>Introdu&ccedil;&atilde;o</H2>


    <p>O sistema utilizada no projecto da LinuxFocus para gerir a
documenta&ccedil;&atilde;o e a tradu&ccedil;&atilde;o consiste em diversos ficheiros ASCII, inclu&iacute;ndo
<i>resdb.txt</i>, o <i>issuedb.txt</i> e o <i>maindb.txt</i>.
      Estes ficheiros t&ecirc;m um formato fixo e s&atilde;o utilizados para gerar as
p&aacute;ginas web. Contudo, s&atilde;o dif&iacute;ceis de estender e a sua natureza separada
dos dados torna dif&iacute;cil o manuseamento da informa&ccedil;&atilde;o para um artigo.</p>

    <p>
      A LinuxFocus n&atilde;o gerou muito conte&uacute;do web automaticamente desde que
comecei a nova base de dados. Como editor na equipa alem&atilde; tinha todo o
interesse em ter os ficheiros index.html gerados na site dinamicamente.
Editar diversos ficheiros HTML cada vez que um novo artigo &eacute; traduzido
traduz um enorme esfor&ccedil;o e era a causa de muitos links inacess&iacute;veis. Assim
sendo, pretendia um novo sistema ao qual podesse adicionar informa&ccedil;&atilde;o
facilmente e a partir do qual podesse gerar as p&aacute;ginas index para o site.
Eu comecei a trabalhar nisto algures no Ver&atilde;o de 2000. </P>

    <p>A escolha do XML foi um pouco arbitr&aacute;ria. Foram feitas sugest�es
para construir uma base de dados relacional, mas tinha experi&ecirc;ncia no XML e
preferia um sistema baseado em ficheiros de texto. Nesse mesmo instante se
viu que um novo esquema de numera&ccedil;&atilde;o seria mais &uacute;til, porque a base de
dados podia utilizar um tipo de ID em vez de dois ou tr&ecirc;s esquemas em uso.
O Guido Socher procedeu a toda a renumera&ccedil;&atilde;o, o que foi um grande feito (o
meu muito obrigado!).</p>

    <p>O Tipo de defini&ccedil;&atilde;o do Documento (DTD) j&aacute; estava em desenvolvimento,
e j&aacute; havia um pouco de conte&uacute;do na base de dados para testar. Com o novo
esquema de numera&ccedil;&atilde;o, o tempo estava correcto para carregar a base de dados
com conte&uacute;do. Depois de ter adicionado cerca de 20 artigos, tornou-se mais
claro que isto era uma projecto enorme. Escrever scripts para utilizarem os
velhos ficheiros era poss&iacute;vel, mas nem toda a informa&ccedil;&atilde;o que a nova base de
dados podia conter estava dispon&iacute;vel, e como explicado a informa&ccedil;&atilde;o que
estava dispon&iacute;vel estava distribu&iacute;da por diversos ficheiros. Felizmente, o
Floris Lambrechts envolveu-se e tenho de lhe agradecer profundamente por
ter adicionado muito do conte&uacute;do &agrave; base de dados. Sem a sua ajuda, o
sistema n&atilde;o seria o que &eacute; hoje.</P>

    <p>Ao mesmo tempo do novo formato tamb&eacute;m veio a possibilidade de
adicionar nova informa&ccedil;&atilde;o. E ao longo do &uacute;ltimo foram adicionados novos
tipos de dados &agrave; base de dados. Nos princ&iacute;pios as extens�es eram uma tabela
de tradutores, editores e outras pessoas envolvidas no LinuxFocus e a
localiza&ccedil;&atilde;o de ficheiros. A raz&atilde;o para a acrescentar a &uacute;ltima tinha haver
os v&aacute;rios esquemas para os nomes dos ficheiros usados desde o princ&iacute;pio da
LinuxFocus. Durante a renumera&ccedil;&atilde;o foram reduzidos para dois esquemas.
Alguns ficheiros utilizavam includes do lado do servidor e a extens&atilde;o
.shtml, onde velhos artigos utilizavam as extens�es .html. A identifica&ccedil;&atilde;o
&lt;file&gt; pode ser usado para sobrescrever o utilizado por defeito. (O
utilizado por defeito correntemente utiliza um formato "article" + n&uacute;mero
de artigo + ".shtml". Pode ainda incluir uma op&ccedil;&atilde;o ".meta" no caso do
ficheiro estar no formato meta da LinuxFocus.) </p>

    <p>Agora que a base de dados estava a atingir um n&iacute;vel cr&iacute;tico de
informa&ccedil;&atilde;o, eu finalmente consegui testar o software que estava a escrever.
As correntes folhas de estilo XSLT, n&atilde;o s&atilde;o as primeiras implementa&ccedil;�es.
Foram precedidas pelo c&oacute;digo Perl. Mas com o crescimento do tamanho da base
de dados a performance tornou-se importante. A primeira tentativa foi
simples mas n&atilde;o foi suficientemente boa. Mas antes de iniciar a explica&ccedil;&atilde;o
das ferramentas. Explicarei o formato da base de dados.</p>

    <A NAME="206lfindex1">&nbsp;</A>
<H2>O Tipo de Defini&ccedil;&atilde;o do Documento (DTD)</H2>


    <p>Primeiro de tudo, o XML, &eacute; uma sintaxe de especifica&ccedil;&atilde;o para
linguagens de markup. O XML define como o markup deve parecer. A sintaxe
descreve a sequ&ecirc;ncia de caracteres permitidos num documento XML "bem
feito". Declara que um documento tem um elemento ra&iacute;z e que um elemento
consiste numa identifica&ccedil;&atilde;o de inicio, conte&uacute;do (texto, elementos filhos,
ou ambos) e uma identifica&ccedil;&atilde;o de fim. Estas identifica&ccedil;�es consistem no
caracter "&lt;" seguido do nome e no fim pelo caracter "&gt;". Uma
identifica&ccedil;&atilde;o de fim tem de ter uma "/" mesmo em frente ao nome.
Identifica&ccedil;�es vazias como as do HTML &lt;br&gt;, levam uma "/" depois do
nome. Uma identifica&ccedil;&atilde;o de inicio pode conter atributos, e estes mesmos t&ecirc;m
uma sintaxe espec&iacute;fica. As identifica&ccedil;�es XML assemelham-se a estas:
    </p>

<pre>
&lt;greeting&gt;Hello, world!&lt;/greeting&gt;
</pre>
para uma tag vazia
<pre>
&lt;br/&gt;
</pre>

    <p>Al&eacute;m da sintaxe, as linguagens tamb&eacute;m cont&ecirc;m sem&acirc;ntica. Isto
descreve como alguns elementos se relacionam entre si. A sem&acirc;ntica do HTML
declara que a tag &lt;body&gt; deve estar contida no elemento &lt;html&gt;
e n&atilde;o o inverso. A sem&acirc;ntica tamb&eacute;m descreve que o elemento &lt;img&gt; &eacute;
vazio, bem como o elemento &lt;br&gt;. Se estas sem&acirc;nticas s&atilde;o dadas numa
nota&ccedil;&atilde;o formal, podem ser tratadas por um programa e utilizadas para <i>validar</i> o
documento que utilize esta sem&acirc;nticas. Uma destas nota&ccedil;�es formais &eacute;
chamada de Document Type Definition, ou sem sigla DTD (Defini&ccedil;&atilde;o Tipo de
Documento). Se um documento passa no processo de valida&ccedil;&atilde;o, chama-se um
documento <I>validada</I>. Voc&ecirc; tem de ser cuidadoso com o XML, pois a sua
valida&ccedil;&atilde;o &eacute; muito r&iacute;gida.
    </p>

    <p>Agora que sabemos o que &eacute; um DTD, demos uma vista de olhos na
      <a href="../../common/src/article206/xml/dtd/lfdb.dtd">Base de Dados
XML da LinuxFocus</a>. Para as v&aacute;rias especifica&ccedil;�es apresentaremos um
exemplo. Ao examinar estes exemplos obter&aacute; uma ideia da informa&ccedil;&atilde;o contida
na base de Dados XML da LinuxFocus.</P>

    <A NAME="206lfindex2">&nbsp;</A>
<H2>&lt;database&gt;</H2>


    <p>O elemento ra&iacute;z na base de dados XML da LinuxFocus, uma das suas
extens�es/localiza&ccedil;�es, &eacute; o elemento &lt;database&gt;.
    </p>

    <pre>
&lt;!ELEMENT database    (themes?, persons?, issues?, articles?)&gt;
    </pre>

    <p>Antes de mais, note que o "?" significa que o elemento filho pode
ocorrer nenhuma ou uma vez. Assim, a base de dados pode conter informa&ccedil;&atilde;o
acerca dos temas LinuxFocus, pessoas, edi&ccedil;�es e artigos. Visto ser bastante
simples, seguirei para um exemplo mais interessante.</p>

    <A NAME="206lfindex3">&nbsp;</A>
<H2>&lt;themes&gt;</H2>


    <p>Os Temas est&atilde;o contidos no elemento &lt;themes&gt; o qual &eacute; um
elemento filho de &lt;database&gt;. Cada um dos temas tem um s&oacute; ID, um
t&iacute;tulo e opcionalmente, uma imagem.</p>

    <pre>
&lt;!ELEMENT themes      (theme+)&gt;
  &lt;!ELEMENT theme       (title*, desc?, img?)&gt;
    &lt;!ELEMENT title       (#PCDATA)&gt;
    &lt;!ELEMENT desc       (#PCDATA)&gt;
    &lt;!ELEMENT img         (EMPTY)&gt;
    </pre>

    <p>Alguns destes elementos tem de ter atributos. Estes s&atilde;o tamb&eacute;m dados
na DTD. Qualquer contexto textual &eacute; contido num elemento com o atributo
xml:lang. O valor do atributo pode ser qualquer um conforme o
<a href="http://www.everything2.org/index.pl?node_id=781276">ISO 3166 standard</a> para
o c&oacute;digo dos pa&iacute;ses. Os exemplos s&atilde;o "en", "fr" e "nl". Quer o id e os
atributos xml:langand xml:lang s&atilde;o especificados na especifica&ccedil;&atilde;o XML original e
fazem parte da sintaxe do XML.</p>

    <pre>
&lt;!ATTLIST theme       id            ID            #REQUIRED&gt;
&lt;!ATTLIST title       xml:lang      NMTOKEN       #REQUIRED&gt;
&lt;!ATTLIST desc        xml:lang      NMTOKEN       #REQUIRED&gt;
&lt;!ATTLIST img         src           CDATA         #REQUIRED&gt;
    </pre>

    <p>Um exemplo de uma base de dados pode parecer-se com isto:
    </p>

    <pre>
&lt;database&gt;
  &lt;themes&gt;
    &lt;theme id="hw"&gt;
      &lt;title xml:lang="en"&gt;Hardware&lt;/title&gt;
      &lt;img src="Hardware.jpg"/&gt;
    &lt;theme&gt;
  &lt;themes&gt;
&lt;/database&gt;
    </pre>

    <A NAME="206lfindex4">&nbsp;</A>
<H2>&lt;issues&gt;</H2>


    <p>As edi&ccedil;�es est&atilde;o contidas no elemento &lt;issues&gt;. Como os temas,
as edi&ccedil;�es t&ecirc;m um &uacute;nico ID.
    </p>

    <pre>
&lt;!ELEMENT issues      (issue+)&gt;
  &lt;!ELEMENT issue       (title+, published?, file*)&gt;
    &lt;!ELEMENT title       (#PCDATA)&gt;
    &lt;!ELEMENT published   (EMPTY)&gt;
    &lt;!ELEMENT file        (#PCDATA)&gt;
    </pre>

    <p>O elemento &lt;published&gt; assinala as edi&ccedil;�es publicadas. A
pr&oacute;xima edi&ccedil;&atilde;o e as pseudo edi&ccedil;�es da mesma Linguagem para Ingl&ecirc;s n&atilde;o t&ecirc;m este
elemento. O elemento &lt;title&gt; tem novamente o atributo @xml:lang. O
elemento &lt;file&gt; denota o direct&oacute;rio onde a edi&ccedil;&atilde;o est&aacute; localizada.
N&atilde;o <i>deve</i> apontar para o index.html, porque &eacute; utilizado para
determinar a localiza&ccedil;&atilde;o dos ficheiros.

    <p>Um exemplo (note que usamos o atributo @code para ordena&ccedil;&atilde;o):

<pre>
    &lt;issue id="ToBeWritten" code="999996"&gt;
      &lt;title xml:lang="en"&gt;Not yet written articles&lt;/title&gt;
    &lt;/issue&gt;
    &lt;issue id="September2001" code="200109"&gt;
      &lt;title xml:lang="en"&gt;September2001&lt;/title&gt;
    &lt;/issue&gt;
</pre>

    <A NAME="206lfindex5">&nbsp;</A>
<H2>&lt;persons&gt;</H2>


    <p>Informa&ccedil;&atilde;o acerca dos autores e tradutores s&atilde;o armazenadas nos
elementos &lt;person&gt;. Cada pessoa deve ter um &uacute;nico ID.

    <pre>
 &lt;!ELEMENT persons (person+)&gt;
 &lt;!ELEMENT person
              ((name|email)*,(homepage|nickname|desc|team)*)&gt;
 &lt;!ELEMENT email (#PCDATA)&gt;
 &lt;!ELEMENT name (#PCDATA)&gt;
 &lt;!ELEMENT homepage (#PCDATA)&gt;
 &lt;!ELEMENT nickname (#PCDATA)&gt;
 &lt;!ELEMENT desc (#PCDATA|%html-els;)*&gt;
 &lt;!ELEMENT team EMPTY&gt;
    </pre>

    <p>Cada pessoa pode ter a seguinte informa&ccedil;&atilde;o: um nome, um (ou mais) endere&ccedil;os de
correio electr&oacute;nico, p&aacute;ginas pessoais e alcunhas. Se a pessoa tamb&eacute;m faz
parte de uma equipa de tradu&ccedil;&atilde;o, adicionamos o elemento &lt;team&gt;. Por
exemplo, a linha seguinte no elemento &lt;person&gt; quer dizer que o
Floris pertence &agrave; equipa alem&atilde; &lt;team xml:lang="nl"/&gt;. Por fim, cada
pessoa pode ter uma descri&ccedil;&atilde;o, que podem conter v&aacute;rios links.

    <p>Um exemplo:

<pre>
    &lt;person id="nl-ew"&gt;
      &lt;name&gt;Egon Willighagen&lt;/name&gt;
      &lt;email&gt;egonw@linuxfocus.org&lt;/email&gt;
      &lt;team xml:lang="nl"/&gt;
    &lt;/person&gt;
</pre>

    <A NAME="206lfindex6">&nbsp;</A>
<H2>&lt;articles&gt;</H2>


    <p>Os artigos, obviamente, a parte mais interessante da base de dados.

    <pre>
  &lt;!ELEMENT articles    (article+)&gt;
    &lt;!ELEMENT article     (title+,
        (file|personref|abstract|issueref|themeref|
         nometa|nohtml|translation|proofread)*)&gt;
      &lt;!ELEMENT abstract    (#PCDATA)&gt;
      &lt;!ELEMENT nohtml      EMPTY&gt;
      &lt;!ELEMENT nometa      EMPTY&gt;
      &lt;!ELEMENT translation
                   (personref*, (reserved|finished|proofread)*)&gt;
      &lt;!ELEMENT reserved    (#PCDATA)&gt;
      &lt;!ELEMENT finished    (#PCDATA)&gt;
      &lt;!ELEMENT proofread   (personref*, (reserved|finished)*)&gt;
&lt;!ATTLIST article     id            ID            #REQUIRED
                      xml:lang      NMTOKEN       #IMPLIED
                      type          (article|coverpage)
                                                  "article"
                      next          IDREF         #IMPLIED
                      prev          IDREF         #IMPLIED&gt;
&lt;!ATTLIST file        xml:lang      NMTOKEN       #REQUIRED
                      type          (target|meta) "target"&gt;
&lt;!ATTLIST translation from          NMTOKEN       #REQUIRED
                      to            NMTOKEN       #REQUIRED&gt;

    </pre>

    <p>Cada artigo tem, pelo menos, um t&iacute;tulo; um para cada linguagem. O
elemento &lt;file&gt; pode ser usado para dar a localiza&ccedil;&atilde;o do ficheiro do
artigo, quer para o formato META e a vers&atilde;o HTML (veja o exemplo abaixo).
No caso de a vers&atilde;o META ou HTML n&atilde;o estar dispon&iacute;vel pode utilizar-se os
elementos opcionais &lt;nohtml/&gt; e &lt;nometa/&gt;. Cada artigo pode
conter um resumo. Tendo o resumo na base de dados quer dizer que podem ser
criadas p&aacute;ginas web indexadas a partir dele.

    <p>O elemento &lt;article&gt; tem cinco atributos: o @ID requerido, o
atributo xml:lang opcional que denota a l&iacute;ngua em que o artigo original foi
escrito, um atributo @type utilizado para p&aacute;ginas principais, os atributos
s&atilde;o utilizados na tradu&ccedil;&atilde;o sendo tratados como artigos. Por fim, mais dois
atributos opcionais, @next e @prev, que s&atilde;o utilizados para juntar os
artigos a partir de uma s&eacute;rie.

    <p>Um artigo est&aacute; associado a uma edi&ccedil;&atilde;o e a um tema com os elementos &lt;issueref&gt; e &lt;themeref&gt;,
tendo ambos um atributo @href. O valor para este atributo deve ter um &uacute;nico
ID, o ID associado &agrave; edi&ccedil;&atilde;o ou tema.

    <p>Um exemplo:

<pre>
&lt;article id="article206" xml:lang="en"&gt;
  &lt;title xml:lang="en"&gt;Using XML and XSLT to build
    LinuxFocus.org(/Nederlands)&lt;/title&gt;
  &lt;personref href="nl-ew"/&gt;
  &lt;issueref href="ToBeWritten"/&gt;
  &lt;themeref href="appl"/&gt;
  &lt;abstract xml:lang="en"&gt;
This article shows you how parts of the Dutch web site of LinuxFocus is
generated with XSLT tools from the XML database. It compares this with
the (very) much slower DOM tools in Perl.
  &lt;/abstract&gt;
&lt;/article&gt;
</pre>

    <p>Um elemento &lt;article&gt; localizado assemelha-se:

<pre>
&lt;article id="52"&gt;
  &lt;title xml:lang="nl"&gt;Enlightenment&lt;/title&gt;
  &lt;file xml:lang="nl"&gt;Nederlands/July1998/article52.html&lt;/file&gt;
  &lt;translation from="en" to="nl"&gt;
    &lt;personref href="nl-tu"/&gt;
    &lt;reserved&gt;2000-09-06&lt;/reserved&gt;
    &lt;finished&gt;2000-10-04&lt;/finished&gt;
    &lt;proofread&gt;
      &lt;personref href="nl-fl"/&gt;
      &lt;reserved&gt;2000-10-04&lt;/reserved&gt;
      &lt;finished&gt;2000-10-04&lt;/finished&gt;
    &lt;/proofread&gt;
  &lt;/translation&gt;
  &lt;abstract xml:lang="nl"&gt;
Enlightenment is een Linux window-manager met
uitgebreide mogelijkheden.  Dit artikel bespreekt
ze, samen met de installatie en de instelling
van E.  Dit alles is niet voor beginners daar
E op het moment nog in beta-stadium
verkeert.
  &lt;/abstract&gt;
&lt;/article&gt;
</pre>

    <p>Note que esta tradu&ccedil;&atilde;o &eacute; reservada para a tradu&ccedil;&atilde;o de uma dada data
em que &eacute; feito, mas tamb&eacute;m torna a leitura mais evidente. De qualquer
maneira a pessoa que fez o trabalho &eacute; linkada com os elementos &lt;personref&gt;.

    <p>Para todos os elementos, o melhor tutorial &eacute; a pr&oacute;pria base de dados actual:
    <ul>
      <li><a href="../../common/src/article206/xml/db/lfdb.en.xml">English Database</a>
      <li><a href="../../common/src/article206/xml/db/lfdb.nl.xml">Dutch localisation</a>
    </ul>

  <A NAME="206lfindex7">&nbsp;</A>
<H2>Gerar automaticamente as p&aacute;ginas web</H2>


  <p>Uma das raz�es  para criar este novo formato foi o de criar
autom&aacute;ticas os &iacute;ndices web a partir de. Agora que entendemos (?) o formato
da base de dados vejamos como podemos utiliz&aacute;-lo para gerar algumas p&aacute;ginas.

  <p>Primeiro, um pouco de hist&oacute;ria. A primeira implementa&ccedil;&atilde;o utilizou
m&oacute;dulos Perl como interface &agrave; base de dados. Apesar da interface
ser bastante limpa, a implementa&ccedil;&atilde;o era muito lenta. A informa&ccedil;&atilde;o estava contida num
contentor XML chamado Document Object Model (DOM). Muitas das
implementa&ccedil;�es para DOM, s&atilde;o, contudo, muito lentas pelo menos mais lenta
que a alternativa Simple Application interface para XML (SAX).

  <p>Mas se a tarefa &eacute; s&oacute; para gerar p&aacute;ginas web uma terceira alternativa
parece ser melhor: <a href="http://www.w3.org/TR/xslt">XSLT</a>. &Eacute; uma
linguagem de transforma&ccedil;&atilde;o baseada no XML. Muitos processadores XSLT existem
presentemente e muitas das linguagens de programa&ccedil;&atilde;o s&atilde;o suportadas. H&aacute;
alguns tempos atr&aacute;s houve um artigo da LinuxFocus
  <a href="../July2000/article156.shtml">XML::XSLT,
  uma das implementa&ccedil;�es Perl em XSLT</a>. Desde a publica&ccedil;&atilde;o deste artigo,
muitas implementa&ccedil;�es apareceram e h&aacute; alguns que eu recomendo:
  <ul>
    <li><a href="http://www.gingerall.com/">Sablotron</a>
    <li><a href="http://jakarta.apache.org/">Xalan</a>
    <li><a href="http://xmlsoft.org/XSLT/">Xsltproc</a>
  </ul>
  Os exemplos utilizados no resto do artigo utilizaram o Sablotron.

  <p>Um processador XSLT toma dois ficheiros para entrada. Um &eacute; a fonte XML
para transformar. O outro &eacute; uma folha de estilo XSLT que define a
transforma&ccedil;&atilde;o. Para gerar as p&aacute;ginas web as seguintes folhas de estilo XSLT
est&atilde;o dispon&iacute;veis:
  <ul>
    <li><a href="../../common/src/article206/xml/stylesheets/issues.xslt">issues.xslt</a><br>
      Esta folha de estilo gera uma lista de edi&ccedil;�es, com os seus respectivos artigos.
    <li><a href="../../common/src/article206/xml/stylesheets/issuetoc.xslt">issuetoc.xsl</a><br>
      Este gera uma tabela com o conte&uacute;do de uma determinada edi&ccedil;&atilde;o.
    <li><a href="../../common/src/article206/xml/stylesheets/issuetoc_full.xslt">issuetoc_full.xslt</a><br>
      Como o anterior, mas com mais informa&ccedil;&atilde;o.
    <li><a href="../../common/src/article206/xml/stylesheets/mainindex.xslt">mainindex.xslt</a><br>
      Gera uma lista de artigos com informa&ccedil;&atilde;o do estado da tradu&ccedil;&atilde;o.
    <li><a href="../../common/src/article206/xml/stylesheets/previssues.xslt">previssues.xslt</a><br>
      Uma lista de todas as edi&ccedil;�es publicadas.
    <li><a href="../../common/src/article206/xml/stylesheets/recently_translated.xslt">recently_translated.xslt</a><br>
      Os dez artigos traduzidos mais recentes.
    <li><a href="../../common/src/article206/xml/stylesheets/rss.xslt">rss.xslt</a><br>
      Gera um ficheiro RSS com os dez artigos traduzidos mais recentemente.
    <li><a href="../../common/src/article206/xml/stylesheets/theme.xslt">theme.xslt</a><br>
      Esta folha de estilo gera a p&aacute;gina index para um determinado tema.
    <li><a href="../../common/src/article206/xml/stylesheets/themes_index.xslt">themes_index.xslt</a><br>
      Gera um &iacute;ndice com todos os temas.
    <li><a href="../../common/src/article206/xml/stylesheets/vertaald.xslt">vertaald.xslt</a><br>
      Mostra todos os artigos traduzidos numa determinada l&iacute;ngua.
  </ul>
  Note que estas folhas de estilo n&atilde;o s&atilde;o as &uacute;ltimas vers�es. Contactem-me
ou um dos editores da equipas de tradu&ccedil;&atilde;o alem&atilde;s para obter as vers�es mais
actualizadas.

  <p>Para gerar o mainindex.html, por exemplo, a equipa Alem&atilde; corre:

<pre>
sabcmd stylesheets/mainindex.xslt db/lfdb.nl.xml > ../mainindex.html
</pre>

  <p>As folhas de estilo sabem onde se encontra a raiz da base de dados
Inglesa e s&oacute; precisam da localiza&ccedil;&atilde;o da base de dados como entrada. Algumas
folhas de estilo precisam de um par&acirc;metro adicional:

<pre>
sabcmd stylesheets/theme.xslt db/lfdb.nl.xml '$theme=appl' > ../Themes/appl.html
</pre>

  <p>O <a href="../../Nederlands/index.html">index.html</a> alem&atilde;o &eacute; gerado
a partir da base de dados, mas utiliza uma configura&ccedil;&atilde;o mais complexa. O
index.html &eacute; feito com o <a href="http://main.linuxfocus.org/~guido/dev/#lfpagecomposer">lfpagecomposer</a> do
Guido Socher a partir de um determinado n&uacute;mero de ficheiros pr&eacute;-processados de entrada. E
estes ficheiros pr&eacute;-processados s&atilde;o gerados a partir de um n&uacute;mero de
ficheiros .set tais como:
<pre>
&lt;H2>Vorige nummers&lt;/H2>

&lt;p>Dit zijn de uitgaven van LinuxFocus in het Nederlands:
&lt;ul>
&lt;!-- macro xslt previssues -->
&lt;/ul>
</pre>

<pre>
&lt;H2&gt;Recent vertaalde artikelen&lt;/H2&gt;
&lt; macro xslt recently_translated --&gt;
<!-- macro xslt recently_translated -->
</pre>

  Estes ficheiros s&atilde;o simplesmente fragmentos HTML com macros aplicadas &agrave;
base de dados local. O processo &eacute; feito com um programa chamado
  <a href="../../common/src/article206/xml/bin/apply_stylesheets.pl">apply_stylesheets.pl</a>
  que procura por comandos &lt;!-- macro xslt [stylesheet] --&gt; e
verifica a base de dados com este comando. Note que a extens&atilde;o .xslt &eacute;
omitida. O nosso <a href="../../Nederlands/WorkSpace/Index/Makefile">Makefile</a> cont&eacute;m:

<pre>
%.shtml: %.pre
        @echo "Making $*..."
        @../../xml/bin/apply_stylesheets.pl $*.pre
</pre>

  <p>Os ficheiros *.shtml resultantes s&atilde;o utilizados pela script
lfpagecomposer. AS folhas de estilo que s&atilde;o utilizadas para gerar o index.html s&atilde;o:
  issuetoc.xslt, previssues.xslt e recently_translated.xslt.

  <A NAME="206lfindex8">&nbsp;</A>
<H2>Localizando</H2>


  <p>Para utilizar este sistema noutras linguagens, precisa de fazer o
seguinte:
  <ol>
    <li>localizar a base de dados XML (como lfdb.nl.xml)
    <li>localizar as folhas de estilo
  </ol>

  <p>O segundo passo &eacute; um pouco infeliz. Em princ&iacute;pio s&oacute; o texto de sa&iacute;da &eacute;
que precisa de ser localizado, mas as folhas de estilo ainda n&atilde;o t&ecirc;m
propriedades de localiza&ccedil;&atilde;o. Isto &eacute; poss&iacute;vel, contudo, gostaria de o ver
implementado.

  <p>Eu recomendo um editor XML conhecedor de DTD. No Emacs pode, por
exemplo utilizar o modo <a href="http://www.lysator.liu.se/projects/about_psgml.html">psgml</a>.
Isto permite-lhe-&aacute; validar o documento (com <a href="http://www.jclark.com/sp/nsgmls.htm">nsgmls</a>).
Isto ajuda imenso a evitar erros. No Emacs para ainda carregar no bot&atilde;o
direito para ver os elementos e atributos que pode inserir num determinado
s&iacute;tio de um ficheiro XML. (Muito Obrigado a Jaime Villate pela sua
excelente palestra na <a href="http://lsm.abul.org/">confer&ecirc;ncia LSM</a>
em Bord&eacute;us este ano.)

  <p>Uma outra grande ajuda &eacute; a localiza&ccedil;&atilde;o alem&atilde; da base de dados XML. Se
encontrar problemas pode consultar este ficheiro. Apesar do conte&uacute;do ser
maioritariamente alem&atilde;o pode ver como os elementos est&atilde;o organizados. No
caso de n&atilde;o ajudar, pode sempre enviar-me um <a href="mailto:egonw@linuxfocus.org">email</a>.

  <p>Localizar as folhas de estilo &eacute; provavelmente um pouco meticuloso. O
texto est&aacute; misturado com os comandos XSLT. Nos &uacute;ltimos n&atilde;o deve mexer (
a n&atilde;o ser que saiba o que est&aacute; a fazer) para preservar a sua
funcionalidade. Eu planeio no futuro, ter as folhas de estilo localizadas,
o que significa que s&oacute; precisa de editar um ficheiro que contem as suas
tradu&ccedil;�es sem comandos XSLT, mas isto ainda n&atilde;o est&aacute; feito.

  <A NAME="206lfindex9">&nbsp;</A>
<H2>Planos Futuros</H2>


  <p>OK, isto deve dar-lhe uma ajuda a come&ccedil;ar. Muitas das coisas pode
copiar/colar dos ficheiros alem&atilde;es. Todos os ficheiros s&atilde;o FDL e GPL. No
pr&oacute;ximo ano estes s&atilde;o os planos com este sistema:
  <ul>
    <li>localizar os folhas de estilo
    <li>adicionar novas folhas de estilo (para top_authors.html, top_translaters.html
        e outras coisas que vemos como p&aacute;ginas web)
    <li>possibilidade de uma interface para um dem&oacute;nio de base de dados
	relacional, com o MySQL.
    <li>integrar o sistema com outros utilit&aacute;rios da LinuxFocus (como o
	getticket, etc)
  </ul>
  



<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Forma de respostas para este artigo</h2>
Todo artigo tem sua pr&oacute;pria p&aacute;gina de respostas. Nesta p&aacute;gina voc&ecirc; pode enviar um coment&aacute;rio ou ver os coment&aacute;rios de outros leitores:
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=206&lang=pt"><b>&nbsp;p&aacute;gina de respostas&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="95%">
<TR><TD ALIGN=CENTER BGCOLOR="#9999AA">
<A HREF="../../common/lfteam.html">P&aacute;ginas Web mantidas pelo time de Editores LinuxFocus</A>
<BR><FONT COLOR="#FFFFFF">&copy; Egon Willighagen, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
<BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=pt&article=article206.shtml" target="_TOP">Clique aqui para reportar uma falha ou para enviar um coment&aacute;rio para LinuxFocus</A><BR></TD>
<TD BGCOLOR="#9999AA"><!-- TRANSLATION INFO -->
<font size=2>Informa&ccedil;&atilde;o sobre tradu&ccedil;&atilde;o:</font><TABLE>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>--</font></td>
    <td><font size=2><a href="mailto:egonw&#64;linuxfocus.org"><FONT COLOR="#FFFFFF">Egon Willighagen</FONT></a></font></td>
</tr>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>en</font></td>
    <td><font size=2><a href="mailto:sherm_pbody&#64;yahoo.com"><FONT COLOR="#FFFFFF">Lorne Bailey</FONT></a></font></td>
</tr>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>pt</font></td>
    <td><font size=2><a href="mailto:bruno&#64;linuxfocus.org"><FONT COLOR="#FFFFFF">Bruno Sousa</FONT></a></font></td>
</tr>
</TABLE></TD>
</TR></TABLE></CENTER>
<p><font size=1>2001-10-05, generated by lfparser version 2.17</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>