Modulo 2 – Introducao ao Biztalk Schema
Autor: Ruth Resende | Publicado: 2014-08-29T10:02:00-03:00


O Biztalk pode receber as mensagens no formato, XML, Flat File (txt) ou EDI (Electronic Document Interchange), mas sempre vai processar e trabalhar com as mensagem em formato XML.

Isso quer dizer que devemos ter um “esqueleto”, um modelo da mensagem, para saber quais campos esperar e qual estrutura poder validar.
No Visual Studio, utilizamos o Biztalk Schema Editor para criar um schema que representa esse modelo de mensagem. O resultado é um arquivo XSD (XML Schema Definition), onde criar esse arquivo é um dos primeiros passos no desenvolvimento de um novo projeto em Biztalk.



Terminologia do XML


No XML nós temos:


Root: É o elemento Pai do schema. Por definição, o schema de um projeto em Biztalk, sempre deve conter um Root Node.


Namespace: É usado para identificar o schema de forma única, conforme padrão do W3C. Dentro do Biztalk, a mensagem é identificada pelo Namespace + Root Node. É recomendado que essa combinação seja única dentre todos os projetos publicados.


Elemento: Usado para armazenar um dado de forma hierarquica.



Atributo: Usado para associar uma informação adicional ao Elemento e não pode ser aninhado.

Como no exemplo:

&lt;Cliente ID=”12345”&gt;Contoso&lt;/Cliente&gt;


Nesse exemplo,&nbsp; dentro do schema a tag Cliente seria o Elemento e o ID dentro da tag, seria o Atributo.



XSDL (XML Schema Definition Language): É uma linguagem usada para criar schemas, a qual representa o formato da mensagem que o Biztalk irá processar.



XPath (XML Path Language): É uma linguagem usada para navegar através da hierarquia de um documento XML.


Biztalk XML Schema

Dentro do nosso projeto no Visual Studio, um schema é representado visualmente da seguinte forma:



Se abrirmos o arquivo Schema1.xsd em um editor de texto, vamos encontrar:

&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;xs:schema xmlns="http://POC_EDI_ACK.Schema1" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://POC_EDI_ACK.Schema1" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;xs:element name="Root"&gt;
    &lt;xs:complexType&gt;
      &lt;xs:sequence&gt;
        &lt;xs:element name="POC"&gt;
          &lt;xs:complexType&gt;
            &lt;xs:sequence&gt;
              &lt;xs:element name="Teste" type="xs:string" /&gt;
              &lt;xs:element name="Teste2" type="xs:string" /&gt;
            &lt;/xs:sequence&gt;
          &lt;/xs:complexType&gt;
        &lt;/xs:element&gt;
      &lt;/xs:sequence&gt;
    &lt;/xs:complexType&gt;
  &lt;/xs:element&gt;
&lt;/xs:schema&gt;


Nesse schema, reparem no Root Node, que eu chamei de Root e no namespace que é http://POC_EDI_ACK.Schema1. Nesse schema tenho um Elemento que eu chamei de POC e dentro dele tenho mais dois elementos, que eu chamei de Teste e Teste2.

Segue o equivalente de uma mensagem baseado nesse schema:

&lt;ns0:Root xmlns:ns0="http://POC_EDI_ACK.Schema1"&gt;
  &lt;POC&gt;
    &lt;Teste&gt;Teste_0&lt;/Teste&gt;
    &lt;Teste2&gt;Teste2_0&lt;/Teste2&gt;
  &lt;/POC&gt;
&lt;/ns0:Root&gt;

Essa mensagem é o que chamamos de Instância de XML.


No Biztalk Schema Editor, conseguimos facilmente alterar qualquer propriedade do schema e seus elementos. Segue a propriedade que representa o Namespace no schema.




Como já falei no post anterior, esse Biztalk Schema Editor é muito útil e uso mesmo em outros projetos, pois posso criar meu schema de uma maneira bem facil e intuitiva e depois posso usar o XSD.exe para transformar esse schema em classes .NET.


Namespaces dentro do Biztalk 


No nosso exemplo anterior o Namespace aparece na tag xmlns com o seguinte valor http://POC_EDI_ACK.Schema1



Podemos notar também que a mensagem tem um Root Node, o qual está representada pelo elemento Root, mas poderia ser qualquer outro nome.



Para o Biztalk processar as mensagens corretamente, ele deve conseguir identifica-las e assim endereçá-las para o seu destinatario. Dessa forma, conseguimos identificar as mensagens através do seu Namespace#Root Node. Os valores são concatenados com o caracter especial ‘#’. 

Voltando ao nosso exemplo, a nossa mensagem seria identificada da seguinte maneira:


http://POC_EDI_ACK.Schema1#Root

Se a mensagem for enviada com o Namespace ou Root Node diferente do que foi publicado, o Biztalk vai lançar uma série de erros e não vai processar a instancia.



Por esse motivo é muito importante e recomendado que nossos schemas sempre tenha um Namespace. 



Ao criar um novo schema o Biztalk já sugere um Namespace apropriado, e se esse Namespace gerado não for o ideal, basta mudá-lo na propriedade Target Namespace. 



Agora vamos, repita comigo:

DEVO SEMPRE INCLUIR NAMESPACES NO MEU SCHEMA.
DEVO SEMPRE INCLUIR NAMESPACES NO MEU SCHEMA.


Nesse artigo, vimos uma pequena introdução aos Schemas do Biztalk e as mensagens XMLs, além de aprender a importancia de se usar os Namespaces no schema.