Camada Semântica

RESUMO

A camada semântica traduz dados normalizados pela camada sintática para o domínio da empresa, enriquecendo-os com significado e formalizando relações. Ela adapta informações técnicas para o contexto de negócio, garantindo consistência e relevância, mas não substitui a camada de domínio, que integra múltiplos sistemas.

A camada semântica é um componente essencial na integração de sistemas. Ela utiliza os dados normalizados pela camada sintática e os aproxima de algo que tenha mais significado ao domínio da empresa. A camada semântica, literalmente, enriquece o significado dos dados estabelecendo novas classes e explicitando relações relevantes. Ela aproxima informações puramente técnicas dos princípios do negócio, facilitando o entendimento pelos times de negócio.

Contexto

Em uma arquitetura de software, diferentes sistemas podem utilizar terminologias distintas para descrever os mesmos conceitos, o que leva a dificuldades de entendimento. Após os dados serem processados pela camada sintática, a camada semântica entra em ação para garantir que esses dados façam sentido no contexto do negócio. A camada semântica interpreta e adapta os dados, resolvendo inconsistências e ambiguidades, garantindo uniformidade de termos e uma comunicação eficiente entre sistemas que falam “idiomas” diferentes.

A camada semântica é particularmente relevante quando múltiplas APIs, como SAP para ERP e Salesforce para CRM, precisam ser integradas e seus dados convertidos para um formato compreensível e útil dentro da organização.

Aplicabilidade

A camada semântica é aplicada em cenários onde a simples normalização de dados não é suficiente. Ela é utilizada para:

  • Traduzir modelos da camada sintática para o domínio da empresa.
  • Simplificar e formalizar relações entre dados.
  • Consolidar representações para conceitos como nome e endereço.
  • Filtrar e adaptar os dados para garantir que apenas as informações relevantes e precisas sejam utilizadas.

Exemplos Práticos

Integração de Dados de um Site em WordPress para a Ontologia da Empresa

Na EximiaCo, utilizamos o WordPress como plataforma tecnológica para criar um site que representa a ontologia da empresa. Essa ontologia, por sua vez, opera como a “Fonte da Verdade” para diversas de nossas operações.

Transformação de Tipos de Postagens

Optamos por criar diferentes tipos de postagens para representar as diversas classes da ontologia. Assim, enquanto na camada sintática faz sentido carregar “tipos de postagens”, na camada semântica, filtramos a lista de tipos de postagens e as reclassificamos como classes:

Python
class Class(BaseModel):
    slug: str
    name: str
    description: str

class Ontology(SemanticModel):
    @property
    def classes(self) -> List[Class]:
        post_types = self.wp.fetch_post_types()
        pattern = re.compile(r'^(?:wp_|nav_)|cases-|feedzy_|jet-engine|assets|classes|page|post|links|media|attachment|visibility_preset|_links$|-links$')

        return [
            Class(slug=post_type.slug, name=post_type.name, description=post_type.description)
            for post_type in post_types
            if not pattern.search(post_type.slug)
        ]

Transformação de Usuários em Autores

A mesma coisa acontece quando consideramos a lista de usuários no WordPress (nível sintático). No nível semântico, a lista de usuários corresponde à lista de autores da ontologia:

Python
class Author(BaseModel):
    id: int
    name: str
    profile_url: HttpUrl

class Ontology(SemanticModel):
    @property
    def authors(self) -> Dict[int, Author]:
        users = self.wp.fetch_users()
        return {user.id: Author(id=user.id, name=user.name, profile_url=user.link) for user in users}

Transformação de Posts em Entradas de Ontologia

Os posts do WordPress são transformados em entradas da ontologia, que possuem um significado mais próximo do domínio da empresa:

Python
class Entry(BaseModel):
    id: int
    title: str
    link: HttpUrl
    class_name: str
    author_id: int
    author_name: str
    creation_date: datetime
    creation_week: str

    @staticmethod
    def from_wordpress_post(post: Post, class_name: str, author: User) -> 'Entry':
        return Entry(
            id=post.id,
            title=post.title.rendered,
            link=post.link,
            class_name=class_name,
            author_id=author.id,
            author_name=author.name,
            creation_date=post.date_gmt,
            creation_week=post.creation_week,
        )

Integração de Dados de um Site de Insights em WordPress

A EximiaCo também utiliza o WordPress como base tecnológica para o site onde compartilha insights para o negócio. Aqui, no lugar de “Entries”, temos “Insights”, e no lugar de “Authors” temos “Publishers”.

Transformação de Posts em Insights

Os posts do WordPress são transformados em insights, que possuem um significado mais próximo do contexto de compartilhamento de conhecimento:

Python
class Insight(BaseModel):
    id: int
    title: str
    link: HttpUrl
    publisher_id: int
    publisher_name: str
    creation_date: datetime
    creation_week: str

    @staticmethod
    def from_wordpress_post(post: Post, author: User) -> 'Insight':
        return Insight(
            id=post.id,
            title=post.title.rendered,
            link=post.link,
            publisher_id=author.id,
            publisher_name=author.name,
            creation_date=post.date_gmt,
            creation_week=post.creation_week,
        )
        
class Insights(SemanticModel):
    def __init__(self):
        self.wp = WordPress('https://insights.eximia.co')

    @property
    def publishers(self) -> Dict[int, User]:
        return self.wp.fetch_users()

    def fetch_insights(self, after: datetime, before: datetime) -> List[Insight]:
        authors = self.publishers
        posts = self.wp.fetch_posts('posts', after, before)

        return [
            Insight.from_wordpress_post(post, authors[post.author])
            for post in posts
        ]

Repare que são duas “semânticas” para uma única “visão sintática”. Isso demonstra como a camada semântica adapta os dados para diferentes contextos dentro da mesma infraestrutura tecnológica.

Experiência Uniforme para o Consumidor

A camada semântica garante que, independentemente de como os dados são recebidos na camada sintática, eles serão transformados em informações significativas e consistentes para o consumidor final. Isso permite que os dados façam sentido no contexto do domínio da empresa e sejam utilizados de forma eficiente.

Analogias e Metáforas

A camada semântica pode ser comparada a um editor que ajusta um texto traduzido para que ele faça sentido no contexto cultural do leitor. Enquanto a camada sintática traduz palavra por palavra, a camada semântica assegura que a tradução final esteja correta e seja significativa.

Importância

A camada semântica é vital para garantir que os dados normalizados façam sentido no contexto específico da empresa. Sem ela, os dados podem ser inconsistentes, incompletos ou irrelevantes para as necessidades do negócio. Ela proporciona uma interpretação precisa dos dados, garantindo que a informação utilizada pela organização esteja alinhada com seus objetivos e contexto.

Limitações e Críticas

A camada semântica não é uma substituta para a camada de domínio porque, principalmente, fica restrita a um sistema. A camada de domínio, por sua vez, irá estabelecer relações entre a “semântica” dos diversos sistemas, gerando um modelo geral consistente. As validações semânticas ficam restritas ao contexto de aplicação. De muitas formas, cada implementação da camada semântica opera como “contexto delimitado” do domínio.

Comparação com Conceitos Similares

  • Camada Sintática: A camada sintática se preocupa com a forma e estrutura dos dados, enquanto a camada semântica foca no significado e na interpretação dos dados.
  • Camada de Domínio: Enquanto a camada semântica traduz dados para um único sistema, a camada de domínio estabelece relações entre a semântica de diversos sistemas, gerando um modelo geral consistente.
  • Mappers de Dados: Ferramentas como ORMs (Object-Relational Mappers) lidam com a transformação de dados em um contexto de banco de dados, enquanto a camada semântica trata da adaptação de dados no contexto de APIs e sistemas externos.

Perguntas Frequentes (FAQs)

A camada semântica realiza validação dos dados?
Sim, a camada semântica valida os dados dentro do contexto do domínio da empresa, garantindo que eles sejam consistentes e relevantes.

Como a camada semântica lida com inconsistências nos dados?
A camada semântica aplica regras de negócio e lógica de validação para resolver inconsistências e adaptar os dados ao contexto da empresa.

A camada semântica substitui a camada sintática?
Não, a camada semântica complementa a camada sintática, utilizando os dados normalizados e traduzindo-os para o domínio específico da empresa.

Recursos Adicionais

  • Livro: “Domain-Driven Design: Tackling Complexity in the Heart of Software” por Eric Evans – para entender a importância da camada semântica no contexto de DDD.

Gostaria de mais informações?

Se você tem interesse neste assunto ou gostaria de mais informações sobre como a EximiaCo pode ajudar a sua empresa a utilizar a tecnologia para gerar mais resultados, entre em contato conosco.

0
Gostaríamos de ouvir sua opinião!x

Tenho interesse em conversar

Se você está querendo gerar mais resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

Área de colaboradores

Esse ambiente é de acesso restrito à equipe de colaboradores da EximiaCo.

Trabalha na EximiaCo? Então conecte-se com sua conta: