Extra Guia De Markdown • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 13.1 — Parsing e Gestão de Front Matter YAML

Contexto: Parsing e Gestão de Front Matter YAML aplicado ao domínio de Ecossistema Avançado: Obsidian, Dataview e SSG.

Requisitos de Execução:

  1. Implementar leitor de Front Matter YAML delimitado por --- em arquivos Markdown.

Resultado Esperado

Metadados extraídos: title, layout, tags.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ecossistema Avançado: Obsidian, Dataview e SSG
🔑 Gabarito de Código & Solução Comentada
# parse_frontmatter.py
import re

def extrair_front_matter(conteudo):
    m = re.match(r"^---\s*\n(.*?)\n---\s*\n", conteudo, re.S)
    if not m: return {}
    yaml_raw = m.group(1)
    metadados = {}
    for linha in yaml_raw.splitlines():
        if ":" in linha:
            k, v = linha.split(":", 1)
            metadados[k.strip()] = v.strip().strip('"\'')
    return metadados

md = """---
layout: default
title: "Guia de Markdown"
tags: [docs, jekyll]
---
# Conteúdo da Página
"""
print(extrair_front_matter(md))

🔍 Nível 2: Prática

Problema 13.2 — Simulador de Consultas Dataview em Markdown Notes

Contexto: Simulador de Consultas Dataview em Markdown Notes aplicado ao domínio de Ecossistema Avançado: Obsidian, Dataview e SSG.

Requisitos de Execução:

  1. Processar notas com metadados e filtrar por tags e status (estilo Obsidian Dataview).

Resultado Esperado

Notas filtradas com tag '#devops' e status 'concluído': 2 encontradas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ecossistema Avançado: Obsidian, Dataview e SSG
🔑 Gabarito de Código & Solução Comentada
# dataview_simulator.py
notas = [
    {"arquivo": "nota1.md", "tags": ["python", "backend"], "status": "concluido"},
    {"arquivo": "nota2.md", "tags": ["devops", "cloud"], "status": "concluido"},
    {"arquivo": "nota3.md", "tags": ["devops", "k8s"], "status": "pendente"}
]

def query_dataview(tag_filtro, status_filtro):
    return [n for n in notas if tag_filtro in n["tags"] and n["status"] == status_filtro]

print("Resultado da Query:", query_dataview("devops", "concluido"))

⚡ Nível 3: Integração

Contexto: Gerador de Wikilinks [[Nota]] para Links Markdown Padrão aplicado ao domínio de Ecossistema Avançado: Obsidian, Dataview e SSG.

Requisitos de Execução:

  1. Converter sintaxe de Wikilinks de Obsidian [[NomeDaNota]] e [[NomeDaNota|Texto]] para links Markdown padrão [Texto](NomeDaNota.html).

Resultado Esperado

Conversão de Wikilinks concluída sem perda de formatação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ecossistema Avançado: Obsidian, Dataview e SSG
🔑 Gabarito de Código & Solução Comentada
# wikilink_converter.py
import re

def converter_wikilinks(texto):
    # [[Alvo|Alias]] -> [Alias](Alvo.html)
    texto = re.sub(r'\[\[([^\|\]]+)\|([^\]]+)\]\]', r'[](.html)', texto)
    # [[Alvo]] -> [Alvo](Alvo.html)
    texto = re.sub(r'\[\[([^\]]+)\]\]', r'[](.html)', texto)
    return texto

doc = "Consulte [[Arquitetura]] e [[Guia_Git|Guia Completo de Git]]."
print(converter_wikilinks(doc))

🏆 Nível 4: Desafio Corporativo

Problema 13.4 — Indexador de Base de Conhecimento e Geração de Grafo de Conexões

Contexto: Indexador de Base de Conhecimento e Geração de Grafo de Conexões aplicado ao domínio de Ecossistema Avançado: Obsidian, Dataview e SSG.

Requisitos de Execução:

  1. Varrer diretório de notas, extrair conexões entre arquivos e exportar grafo de conhecimento em JSON.

Resultado Esperado

Grafo de conhecimento gerado: 10 nós, 18 arestas mapeadas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ecossistema Avançado: Obsidian, Dataview e SSG
🔑 Gabarito de Código & Solução Comentada
# knowledge_graph.py
import json

def gerar_grafo_conexoes(notas_dict):
    nos = [{"id": nome} for nome in notas_dict.keys()]
    arestas = []
    for origem, destinos in notas_dict.items():
        for d in destinos:
            arestas.append({"source": origem, "target": d})
    return {"nodes": nos, "links": arestas}

grafo_mock = {
    "Docker.md": ["Containers.md", "Kubernetes.md"],
    "Kubernetes.md": ["Containers.md", "Cloud.md"]
}
print(json.dumps(gerar_grafo_conexoes(grafo_mock), indent=2))