Creating a NIEM IEPD, Part 2: Map and subset NIEM

Design an XML information exchange between U.S. government entities

A parte 1 desta série descreve o processo de criação de um modelo UML de um intercâmbio de informações XML para ser implementado no National Information Exchange Model (NIEM). Neste artigo, avance para a próxima etapa—mapear o modelo para NIEM para determinar quais partes do NIEM o intercâmbio pode usar novamente. Aprenda também como criar um subconjunto do modelo NIEM para incluir em um IEPD.

Priscilla Walmsley, Managing Director, Datypic

Photo of Priscilla WalmsleyPriscilla Walmsley é Diretora de Gerenciamento e Consultora Senior na Datypic. Ela é especialista em tecnologias, arquitetura e implementação XML. Mais recentemente, ela trabalha (por meio do Trusted Federal Systems) com o Departamento de Justiça dos EUA na LEXS, uma estrutura IEPD baseada em NIEM. Ela é autora de Definitive XML Schema (Prentice Hall, 2001) e XQuery (O'Reilly Media, 2007). Ela também é coautora de Web Service Contract Design and Versioning for SOA (Prentice Hall, 2008). É possível entrar em contato com a Priscilla pelo e-mail pwalmsley@datypic.com.



04/Jun/2010 (Primeira publicação 04/Jun/2010)

09 de março de 2010: Adicionados os links para a Parte 3 desta série nas seções de Introdução, Conclusão e Recursos.

Agora que criamos um modelo UML de seu intercâmbio (veja a Parte 1), a próxima etapa é mapear seu modelo para o NIEM para determinar quais partes do NIEM você reutilizará em suas mensagens. Esse mapeamento é mais comumente feito em uma planilha, conhecida como Modelo de Mapeamento de Componente (CMT). O CMT é útil por várias razões:

  • Ele fornece uma definição detalhada e legível de seu modelo de intercâmbio com locais para comentários e documentação extra.
  • Ele torna explícitas quais partes do modelo reutilizam componentes NIEM e quais são customizadas para a Information Exchange Package Documentation (IEPD).
  • Ele funciona como uma lista de verificação conveniente ao fazer um subconjunto do modelo NIEM.

Criando um modelo de mapeamento de componente

Acrônimos frequentemente usados

  • CMT: Component Mapping Template
  • IEPD: Information Exchange Package Documentation
  • NIEM: National Information Exchange Model
  • SSGT: NIEM Schema Subset Generation Tool
  • UML: Unified Modeling Language
  • XML: Extensible Markup Language

Geralmente, CMTs são criados no Microsoft® Office Excel® ou outro software de planilhas, como o OpenOffice.org Calc. No entanto, é possível criá-los em qualquer formato tabular. Não existe um formato obrigatório para um CMT, mas um CMT típico possui, no mínimo, as seguintes colunas:

  • Tipo de origem. O nome da classe no modelo UML
  • Propriedade de origem. O nome da propriedade no modelo UML
  • Tipo de dado. O tipo de dado da propriedade
  • Descrição. Uma breve descrição do tipo ou propriedade
  • Cardinalidade. A quantidade de propriedades que possuem permissão de aparecer
  • Indicador de extensão. Se um modelo corresponde ou não a um componente no modelo NIEM
  • XPath. O caminho para o elemento em uma mensagem XML

Alguns implementadores de NIEM adicionam mais colunas ao CMT para representar detalhes da extensão do NIEM. A Parte 3 desta série de artigos explorará o NIEM em extensão.

Registrando seu modelo no CMT

A primeira etapa para registrar seu modelo UML nas cinco primeiras colunas do CMT. A Parte 1 desta série de artigos introduz um diagrama UML de um caso de exemplo simples que envolvia relatórios de roubo de veículos registrados. Baseando-se no diagrama de classes UML — mostrado novamente na Figura 1— a Tabela 1 mostra a classe TheftLocation no formato CMT. As descrições são omitidas da tabela para economizar espaço, mas um CMT de exemplo completo está disponível na seção Downloads. (Consulte uma versão da Figure 1 somente em texto.)

Figura 1. Diagrama do modelo UML da Parte 1
Completed UML model (with TheftReport class)
Tabela 1. Representando um tipo e propriedades no CMT
Tipo de origemPropriedade de origemTipo de dadosDescriçãoCardinalidade
TheftLocation...
TheftLocationAddressCadeia de caractere...0..1
TheftLocationCityCadeia de caractere...0..1
TheftLocationStateCadeia de caractere...0..1
TheftLocationZipCodeCadeia de caractere...0..1
TheftLocationCountyCodeCountyCode...0..1

Na coluna Tipo de dado, nomes de tipos simples de esquema XML são usados. No caso de listas de código, um nome de lista de código é especificado e os valores válidos são documentados em uma outra guia da planilha. Cardinalidade mostra o número mínimo e máximo de ocorrências, onde * representa um número ilimitado.

Cada associação deve possuir uma linha no CMT, juntamente com linhas para referências aos tipos envolvidos na associação. A Tabela 2 mostra uma representação CMT da associação Theft/TheftLocation.

Tabela 2. Representando uma associação no CMT
Tipo de origemPropriedade de origemTipo de dadosDescriçãoCardinalidade
Theft / TheftLocation Assn
Theft / TheftLocation AssnTheftReferência...1..1
Theft / TheftLocation AssnTheftLocationReferência...1..1

Tipos de função devem ser mostrados com referências da função para o tipo que está desempenhando a função. O tipo de função Witness na Tabela 3 contém uma referência à Person, rotulada RoleOfPerson.

Tabela 3. Representando uma função no CMT
Tipo de origemPropriedade de origemTipo de dadosDescriçãoCardinalidade
Witness
WitnessAccountCadeia de caractere...0..1
WitnessRoleOfPersonReferência...1..1

Pesquisando equivalentes NIEM

A próxima tarefa no mapeamento de seu intercâmbio é determinar onde seu modelo se sobrepõe com o NIEM e registra esses elementos no CMT. Você deseja reutilizar o NIEM o máximo possível para maximizar a interoperabilidade com outros aplicativos NIEM. Uma IEPD não está em conformidade com o NIEM se ela adicionar novos componentes quando componentes semanticamente equivalentes já existirem no modelo NIEM. Dito isso, não force dados no NIEM se eles realmente não se ajustarem. A Parte 3 desta série de artigos explicará como adicionar novos componentes ao modelo.

Devido ao fato de o modelo NIEM ser muito grande, você não gostaria de verificar os esquemas manualmente para procurar componentes correspondentes. Felizmente, várias ferramentas on-line estão disponíveis para encontrar componentes no modelo NIEM (consulta a seção de Recursos para obter os links para essas ferramentas):

  • NIEM Wayfarer. Usando essa ferramenta, é possível pesquisar componentes NIEM e percorrer o modelo com uma página por componente.
  • Schema Central. Essa ferramenta possui recursos similares ao NIEM Wayfarer, mas funciona com uma variedade de vocabulários XML, não somente NIEM.
  • NIEM Schema Subset Generation Tool (SSGT). Use essa ferramenta para pesquisar e explorar o modelo NIEM de uma maneira um pouco mais gráfica. Foi adicionado o recurso de geração de um subconjunto NIEM ao encontrar componentes de interesse.

Use uma dessas ferramentas para procurar todos os componentes em seu CMT que já possam existir no NIEM. Como exemplo, ao procurar um termo Veículo no Schema Central, você verá a página dos resultados da pesquisa na Figura 2.

Figura 2. Página de resultados da pesquisa do Schema Central
Screen capture of Schema Central search results page: elements plus comples and simple types with 'Vehicle' string

Ao clicar em nc:Vehicle, a página na Figura 3 é exibida. Ela mostra algumas características gerais do elemento, seguidas por uma listagem completa de seus possíveis filhos.

Figura 3. Página de exibição do elemento do Schema Central
Screen capture of Schema Central element display page: complete list of children for nc:Vehicle element

Todos os componentes NIEM possuem um prefixo de espaço de nomes: nc refere-se ao NIEM principal, o espaço de nomes no qual os tipos mais fundamentais residem. Há também um nome de espaços para cada um dos domínios (por exemplo, j para Justice). Sinta-se livre para usar componentes NIEM de qualquer domínio, contanto que eles sejam semanticamente equivalentes ao seu modelo. Não é necessário implementar um intercâmbio relacionado à imigração para usar um elemento a partir do domínio imigração.

Recomendações de pesquisa para o modelo NIEM

Independente da ferramenta usada, é possível facilitar a pesquisa do modelo seguindo estas dicas:

  • É geralmente mais fácil começar procurando primeiro os tipos/classes de nível mais alto (neste caso de exemplo, Theft, Property, Location, etc.) e, então, encontrar as propriedades adequadas.
  • Não se esqueça de procurar sinônimos. Caso não encontre License Plate, procure Registration.
  • Caso não seja possível encontrar seu componente específico, procure um componente mais geral. Alguns dos tipos mais gerais no NIEM são Person, Organization, Location, Activity e Item. Por exemplo, caso não encontre Theft Location, é possível procurar, de maneira mais geral, Location e usar nc:Location. Caso não exista um tipo específico para Theft, considere usar o nc:Activity mais genérico.
  • Não procure simplesmente nomes. Se você expandir seu escopo para procurar descrições e enumerações, isso pode levá-lo ao tipo adequado.

Encontrar componentes no modelo NIEM pode parecer assustador no começo, mas se torna mais fácil quando você se tornar mais familiarizado com os padrões gerais de nomenclatura e estruturais do modelo NIEM.

Registrando componentes NIEM no CMT

Ao encontrar um componente NIEM equivalente, registre-o no CMT na coluna XPath. Geralmente, expressões XPath simples são usadas—nomes de elementos e/ou atributos são separados por barras (/). Nomes de tipo não necessitam ser inclusos no XPath. Use prefixos de nome de espaço como nc:, pois nomes de elemento não são necessariamente exclusivos em espaços de nomes.

A Tabela 4 mostra os mapeamentos XPath para TheftLocation. Observação: Para propósitos de formatação, os mapeamentos XPath mais longos são divididos em linhas múltiplas na tabela. Os mapeamentos são, normalmente, uma cadeia de caractere sem espaços em branco.

Tabela 4. Mapeamentos XPath TheftLocation
Tipo de origemPropriedade de origem...Ext?XPath
TheftLocation...nc:Location
TheftLocationAddress...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationStreet /nc:StreetFullText
TheftLocationCity...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationCityName
TheftLocationState...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationState USPostalServiceCode
TheftLocationZip...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationPostalCode
TheftLocationCountyCode...Y

Inclua etapas o suficiente no XPath para identificá-lo de maneira exclusiva. Por exemplo, não coloque simplesmente nc:StreetFullText na linha de Address. Algumas vezes, caminhos múltiplos podem levar a um elemento no NIEM e o caminho completo é necessário para precisão.

No exemplo, a propriedade CountyCode, que é um código de condado específico do estado, não é encontrada no NIEM, então, ela necessitará de uma extensão. Assim, a coluna Ext? é definida para Y e o XPath é deixado em branco, por enquanto. A Parte 3 desta série de artigos mostrará, detalhadamente, o processo de preenchimento nos XPaths para extensões.

Para um mapeamento completo do modelo de exemplo Theft Report para o NIEM, veja a planilha disponível na seção de Downloads.


Criando um subconjunto NIEM

Quando tiver decidido quais componentes do NIEM gostaria de usar em seu intercâmbio, crie um subconjunto do modelo NIEM que leva a forma de um conjunto de documentos de esquema XML. Devido ao fato de o modelo NIEM completo ser tão grande e livremente restrito, um subconjunto NIEM é necessário para validar seu intercâmbio de maneira mais precisa. O subconjunto NIEM restringe os elementos e atributos permitidos, o número de vezes que eles podem ocorrer e — em alguns casos — seus valores permitidos. A criação de um subconjunto NIEM também acelera a validação de mensagens XML, pois os esquemas são muito menores.

Crie subconjuntos NIEM usando o NIEM SSGT. A página inicial do SSGT na Figura 4 possui dois painéis. O painel da direita é onde você pesquisa e explora o modelo e o painel da esquerda mostra seu subconjunto enquanto você adiciona componentes a ele.

Figura 4. Página principal do SSGT
Screen capture of SSGT main page with the NIEM Schema Subset and NIEM Data Model Search panes

Baseando-se em seu CMT, execute pesquisas para encontrar componentes para adicionar a seu subconjunto. Ao usar o SSGT, é possível escolher pesquisar propriedades (nomes de elementos ou atributos), tipos, associações ou outros componentes. Devido ao fato de você possuir os nomes do elemento em seu CMT, faz sentido pesquisar propriedades. Os resultados da pesquisa de amostra estão na Figura 5.

Você pode estar se perguntando por que o mapeamento e os subconjuntos são duas etapas separadas quando é possível executar as tarefas na mesma ferramenta (o SSGT). É seguramente possível executar o mapeamento e os subconjuntos ao mesmo tempo usando o SSGT. No entanto, muitos profissionais do NIEM acham mais fácil fazer o mapeamento com o NIEM Wayfarer ou o Schema Central, que mostra a estrutura real (planificada) dos tipos de maneira mais clara. O SSGT requer mais conhecimento sobre NIEM (e mais cliques) para navegar, então, ir para o SSGT preparado, com um CMT que lista exatamente o que você quer do NIEM, faz com que a criação dos subconjuntos seja mais eficiente.

Figura 5. Página de resultados da pesquisa do SSGT
Screen capture of SSGT search results for the 'personname' property

Adicionando propriedades ao subconjunto

Quando o componente NIEM de interesse for exibido, clique em Add para adicioná-lo a seu subconjunto. Ele então aparece no painel do lado esquerdo, sob NIEM Schema Subset, como na Figura 6.

Ao adicionar uma propriedade, seu tipo vai com ela automaticamente. Por exemplo, se você adicionar nc:PersonName, nc:PersonNameType é também automaticamente adicionado ao subconjunto. Os componentes explicitamente selecionados por você aparecem no painel do lado esquerdo, em negrito, com uma caixa de seleção ao lado, enquanto que os componentes dependentes não estão em negrito.

Figura 6. Subconjunto SSGT
Screen capture of SSGT subset

O SSGT não adiciona as propriedades filhos de um tipo por padrão. Por exemplo, se você adicionar nc:PersonName, ele não inclui as propriedades nc:PersonGivenName e nc:PersonSurName. É necessário adicioná-las ao subconjunto separadamente. Ao adicioná-las, é necessário fazer isso no contexto de nc:PersonName para que o relacionamento pai-filho entre, por exemplo, nc:PersonName e nc:PersonGivenName seja mantido. Para fazer isso, expanda a árvore nc:PersonName nos resultados da pesquisa SSGT e clique em Add ao lado de nc:PersonGivenName, como na Figura 7.

Figura 7. Adicionando um filho usando o SSGT
Screen capture of adding a child and specifying the cardinality of that child using the SSGT

Se, ao invés disso, você tivesse procurado separadamente PersonGivenName e o adicionado a partir dos resultados da pesquisa, o elemento seria adicionado, mas não como um filho de nc:PersonName.

A Figura 7 também mostra que ao adicionar uma propriedade de um tipo, é possível especificar a cardinalidade. Clicar na seta para baixo da direita no botão Add faz com que um menu suspenso que mostra cardinalidades possíveis seja exibido. O padrão é de 0 a infinito.

Se uma propriedade é incluída por herança, ela não é exibida na hierarquia do SSGT por padrão. Por exemplo, expandir nc:Vehicle nos resultados da pesquisa do SSGT não exibe automaticamente o nc:ItemDescriptionText que está mapeado para a propriedade Property Description. Para visualizar essas propriedades herdadas, clique em show inheritance (ao lado de nc:VehicleType) e expanda o tipo que contenha a propriedade de interesse — neste caso, nc:ItemType, como na Figura 8.

Figura 8. Adicionando uma propriedade herdada usando o SSGT
Screen capture of adding an inherited property using the SSGT

Elementos abstratos e o subconjunto

O modelo NIEM usa, comumente, elementos abstratos e grupos de substituição do esquema XML. Por exemplo, há várias maneiras de representar a cor de um item. O NIEM possui um elemento abstratonc:ItemColor—que não pode aparecer em qualquer lugar em uma instância XML. Ao invés disso, ele deve ser substituído por um de vários elementos, como nc:VehicleColorPrimaryCode ou nc:ItemColorDescriptionText. Na terminologia de esquema XML, nc:VehicleColorPrimaryCode e nc:ItemColorDescriptionText são considerados membros de um grupo de substituição cujo cabeçalho é nc:ItemColor.

Os elementos abstratos adicionam alguma complexidade para a criação de um subconjunto, pois é necessário que você adicione os elementos substituíveis em seu subconjunto e não só o elemento abstrato. O SSGT marca todos os elementos abstratos com a palavra abstract e permite que você os expanda para visualizar os elementos substituíveis, como mostra a Figura 9.

Figura 9. Adicionando um elemento substituível usando o SSGT
Screen capture of adding a substitutable element for the nc:ItemColor property using the SSGT

A maioria dos tipos relacionados à data também contém um elemento abstrato nc:DateRepresentation que pode ser substituído por nc:Date, nc:DateTime, etc. É um erro fácil simplesmente adicionar uma propriedade relacionada à data, como nc:ActivityDate sem expandi-la para clicar em nc:DateRepresentation e, então, em nc:Date para permitir os elementos filhos adequados.

Ajuste fino de seu subconjunto

Ao ter criado seu subconjunto, é possível modificá-lo usando o painel do lado esquerdo do SSGT. É possível escolher excluir qualquer componente selecionando a caixa de seleção do lado do elemento e, então, clicando em Delete. Também é possível excluir valores de lista de código permitidos expandindo os tipos simples adequados no painel do lado esquerdo. Por padrão, todos os valores da lista de códigos de um tipo simples estão inclusos no subconjunto.

Também é possível alterar as cardinalidades clicando em Edit Cardinality, na parte superior do painel do lado esquerdo. Fazer isso também lhe dá uma outra oportunidade para decidir quantos itens de uma propriedade em particular são permitidos em um tipo pai.

Seu subconjunto NIEM não necessita estar perfeito neste momento. A criação de conjuntos NIEM é, frequentemente, um processo iterativo. É possível salvar e modificar seu subconjunto, como necessário, durante os estágios finais do desenvolvimento da IEPD.

Gerando seu subconjunto NIEM

Para gerar seu subconjunto, clique em Generate Documents no conto superior direito da página. Ao fazer isso, será exibida uma janela similar à da Figura 10 que mostra algumas opções de geração. Selecione Save Subset Schema to a file e escolha o local para salvá-lo.

Figura 10. Gerando um subconjunto usando o SSGT
Screen capture of how to generate a subset using the SSGT

Fazer isso cria um arquivo .zip chamado Subset.zip com uma subpasta niem que contém o subconjunto NIEM. Ele possui um documento de esquema para cada espaço de nomes a partir do qual você escolheu elementos no SSGT, além de alguns esquemas padrão que vem com todos os subconjuntos.

Somente os tipos que você escolheu estão inclusos nos documentos de esquema e esses tipos contêm somente as propriedades escolhidas. Por exemplo, apesar de nc:PersonNameType possuir sete possíveis filhos em todo o modelo NIEM e todos possuírem cardinalidade 0..*, seu esquema do subconjunto irá conter somente o que está na Listagem 1.

Listagem 1. nc:PersonNameType no subconjunto NIEM
<xsd:complexType name="PersonNameType">
  <xsd:complexContent>
    <xsd:extension base="s:ComplexObjectType">
      <xsd:sequence>
        <xsd:element ref="nc:PersonGivenName" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="nc:PersonSurName" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

O subconjunto também contém um documento XML chamado wantlist.xml, que lista todos os componentes adicionados ao seu subconjunto, juntamente com suas cardinalidades. A wantlist é útil caso seja necessário fazer alterações mais tarde: É possível fazer o upload novamente da wantlist para o SSGT, modificar o subconjunto e gerá-lo novamente. A Listagem 2 mostra partes da wantlist.

Listagem 2. Wantlist parcial do subconjunto NIEM
<w:WantList w:release="2.1" w:product="NIEM" ...>
  <w:Element w:name="j:Person" w:isReference="false"/>
  <w:Element w:name="j:Witness" w:isReference="false"/>
  ...
  <w:Type w:name="j:PersonType" w:isRequested="false">
    <w:ElementInType w:minOccurs="0" w:maxOccurs="1"
      w:name="j:PersonAugmentation" w:isReference="false"/>
  </w:Type>
  <w:Type w:name="j:WitnessType" w:isRequested="false">
    <w:ElementInType w:minOccurs="0" w:maxOccurs="1"
      w:name="j:WitnessAccountDescriptionText" w:isReference="false"/>
    <w:ElementInType w:minOccurs="1" w:maxOccurs="1"
      w:name="nc:RoleOfPerson" w:isReference="true"/>
  </w:Type>
  ...
</w:WantList>

Conclusão e próximas etapas

Neste artigo, mostrei como mapear um intercâmbio UML para o NIEM usando um CMT. Descrevi, então, o processo de criação de um subconjunto NIEM usando o NIEM SSGT. Na Parte 3 desta série, tratarei das linhas do CMT que ainda não foram preenchidas: as extensões. Explicarei as diferentes abordagens para estender o NIEM e percorrerei o processo de criação de esquemas de Intercâmbio e Extensão.


Downloads

DescriçãoNomeTamanho
Component Mapping Template (CMT)niem2mapping.zip62KB
NIEM Subsetniem2subset.zip11KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Segmentos de mercado
ArticleID=494459
ArticleTitle=Creating a NIEM IEPD, Part 2: Map and subset NIEM
publish-date=06042010