msdn11_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Imagens Acessíveis, Conversor de Formato de Imagens e XML

por Nancy Michell

 

Tenho sido advertido em relação ao uso de imagens gráficas em Web sites quando se deseja uma boa acessibilidade. Com o quê devo tomar cuidado exatamente?

Às vezes, um Web site depende de uma boa imagem gráfica que sugira o tipo de navegação que ele fornecerá. No entanto, no caso de um usuário com deficiências visuais, é preciso muito mais que uma simples imagem gráfica na qual você espera que o usuário clique com base em dicas visuais. Os leitores de tela obtêm o texto a ser lido por meio de um atributo alt da tag IMG, por isso, certifique-se de incluí-lo. Alguns designers se concentram mais em um design de dimensionamento de fonte com pixels perfeitos, que acione campainhas de alarme de acessibilidade. Se você pretende tornar o seu site acessível a usuários com deficiências visuais, suas fontes precisam ser redimensionadas e movimentadas quando o usuário selecionar uma quantidade de texto maior.

Quando o seu site usa um tamanho de fonte fixo, esse tamanho só pode ser cancelado por meio das opções de acessibilidade — selecionando-se "ignore font sizes specified in Web pages". O Web site da Microsoft tem uma aparência ótima (com o tamanho de texto padrão do browser) e ainda honra as configurações do usuário sem recorrer ao override.

A MSDN® fornece algumas dicas úteis para a criação de sites de acessibilidade em Accessibility Design Guidelines for the Web http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsent7/html/vxconAccessibilityDesignGuidelinesForWeb.asp). Algumas observações a ter em mente são:

 

      Forneça links de texto, além de links de mapa de imagens.

      Forneça uma boa navegação de teclado, de acordo com as regras.

      Certifique-se de oferecer alternativas a todos os controles e applets.

      Se o seu site usa frames, tenha também páginas sem frames.

      Forneça títulos a seus objetos.

 

Além disso, o Web site supramencionado oferece informações sobre a navegação apropriada no teclado, formatos de arquivo e outras dicas. Para obter mais informações sobre acessibilidade, consulte http://www.microsoft.com/enable.

 

Imagens

Como posso converter programaticamente um arquivo BMP em um arquivo JPG ou GIF?

Se usar uma linguagem que seja compatível com o Microsoft® .NET Framework, você poderá fazer isso facilmente com a classe System.Drawing.Image. Você só precisaria criar um objeto de imagem a partir de um arquivo e depois salvá-lo novamente no novo formato gráfico.

Se as suas imagens são iniciadas como BMPs, talvez você deva considerar armazená-las como PNGs. Os JPEGs perdem muito, e a qualidade pode cair bastante dependendo do conteúdo da imagem. Os GIFs são apropriados para imagens gráficas simples, que contêm grandes áreas de preenchimento, mas são bastante limitados no que se refere às cores (eles utilizam uma paleta de cores com no máximo 256 cores). Os PNGs não têm nenhum desses problemas, por isso, são a melhor escolha para conversões automatizadas de imagens gráficas.

O código C# disponível para download no link fornecido no início deste artigo produzirá uma ferramenta de linha de comandos quando for compilado; ela pode converter qualquer formato de imagem suportado pelo .NET Framework. As linhas na função Main fazem a conversão:

 

Image img = null;

img = Image.FromFile(Source);

img.Save(Dest, Format);

 

Aqui, Source corresponde a uma string que contém um caminho válido para um arquivo de imagem, Dest é uma string que contém um arquivo válido para o arquivo de saída, e Format é um objeto System.Drawing.Imaging.ImageFormat.

Todo o restante do código disponível no download serve apenas para empacotar tudo na ferramenta da linha de comandos. Aparentemente, você já estava obtendo um arquivo do tipo de bitmap, então seria possível usar alguma ação como essa para convertê-lo para PNG (ou outro formato). A outra opção é simplesmente usar as linhas de código-fonte de que você necessita, presumindo que o seu método de captura do screen shot possa ser utilizado a partir do managed code. Essas duas técnicas requerem que o .NET Framework esteja instalado no sistema.

 

ASP.NET

Ouvi dizer que não é possível compartilhar páginas ASP.NET (arquivos .aspx) e controles de usuário (arquivos .ascx) entre os aplicativos. Isso é verdade?

Na verdade, parece que existe um método razoavelmente simples de compartilhar esses arquivos, mapeando partes de diferentes aplicativos para os mesmos diretórios físicos. Suponha que você tenha dois aplicativos, app1 e app2, e queira compartilhar os mesmos controles de usuário entre eles. Em termos de caminhos físicos e virtuais, é isto que você quer ter:

 

Virtual

Físico

/app1

c:\app1

/app2

c:\app2

/app1/controls

c:\SharedControls

/app2/controls

c:\SharedControls

 

Observe como /app1/controls e /app2/controls são mapeados para o mesmo caminho físico, fornecendo o compartilhamento desejado. Veja as etapas a serem seguidas para configurar esses aplicativos:

 

1.    Execute o gerenciador do IIS (Internet Information Services) (inetmgr).

2.    Crie app1 e app2 da mesma maneira que você cria os aplicativos para IIS.

3.    Ainda em inetmgr, clique com o botão direito no recém-criado app1 e escolha New | Virtual Directory.

4.    Digite "controls" para o alias.

5.    Digite "c:\SharedControls" para o diretório e complete o assistente.

6.    Em inetmgr, clique com o botão direito no “controls” recém-criado e escolha Properties.

7.    Na caixa de diálogo Properties, clique em "Remove" à direita do nome do aplicativo. Isso mantém o mapeamento virtual, mas não o torna um aplicativo.

8.    Siga novamente as Etapas 3 a 7, mas desta vez para o app2 (em vez de app1).

 

Para testá-lo, coloque um controle de usuário test.ascx em c:\SharedControls. Agora, coloque algumas páginas que utilizem o controle de usuário em c:\app1 e c:\app2. Você terá algo como este código:

 

 

Tente chamar http://localhost/app1/testpage.aspx e http://localhost/app2/testpage.aspx. Elas usarão o mesmo controle de usuário. Embora essa técnica funcione bem e possa ser muito útil, existem alguns detalhes dos quais você deverá estar a par antes de escolher usá-la. As páginas e os controles de usuário são compartilhados, mas eles são compilados separadamente para cada aplicativo que os utilize. Desse modo, embora esteja melhorando a capacidade de manutenção de seus sites, você não está interferindo no uso da memória (se comparado a ter várias cópias dos controles). Se as páginas compartilhadas e os controles de usuário usam assemblies code-behind pré-compiladas, você precisará copiar os assemblies no diretório bin de cada aplicativo que as utilizam. Como alternativa, você pode assinar as assemblies e colocá-las no cache de assemblies global.

 

XML

Estou gerando um arquivo XML que possui várias tabelas de dados e preciso associá-las entre si. Como fazer para que meu arquivo XML aponte para outras partes de meu arquivo XML? Aparentemente, eu deveria estar usando XLink, Xpointer ou XPath, mas ajudaria realmente se eu tivesse um exemplo de XML completo com o qual pudesse trabalhar.

Essa é uma pergunta comum. XLink e XPointer não existem em nenhum produto Microsoft, e você não pode usar o XPath sozinho para consultar documentos externos (existe uma função document, mas ela está em XSLT). Então, como fazer isso? Existem duas maneiras comuns. Com o XSLT, você precisaria usar a função document. Por exemplo, você pode criar um arquivo XML como este:

 

   foo.xml

   bar.xml

Para exibir esses arquivos, escreva um template semelhante a este:

  

 

A outra maneira é usar uma DTD (document type definition). Por exemplo, se criar uma entidade externa para foo.xml, você poderá chamá-la com um simples &foo.

Que maneira é melhor? Sem dúvida a primeira, mas se você não tiver experiência em XSLT, será necessária uma curva de aprendizagem. O uso de XSLT permite que você faça um processamento extenso da marcação de entrada, que é o que você desejará fazer na grande maioria das vezes. Qualquer aplicativo que envolva geração de relatórios e que essencialmente destile informações representa um uso ideal da XSLT. A principal vantagem do método DTD é a simplicidade. Com uma definição para cada arquivo, o número de linhas é igual apenas ao número de arquivos que você tem, adicionado do número de vezes em que você faz referência eles. É uma solução de baixo custo.

 

É possível consultar um documento XML sem recorrer aos namespaces? Digamos que um documento XML contenha vários elementos de diferentes namespaces e que eu queira consultá-lo usando o XPath mas ignorando o prefixo do namespace. A idéia é retornar os dados de maneira que os usuários possam emitir consultas XPath sem precisarem lembrar o prefixo do namespace que utilizaram durante a persistência dos dados.

Modificando meu exemplo (veja a Listagem 1), posso emitir uma consulta XPath sem nenhum namespace:

 

//bookRecord[book/Author='Asimov'][//Price $ge$ 20]

 

Listagem 1 XML de Exemplo