🧩 Exercícios: Ecossistema Avançado: Obsidian, Dataview e SSG
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:
- 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)
- Salve o arquivo como:
Atividade_13_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_13_2_SeuNome - 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
Problema 13.3 — Gerador de Wikilinks [[Nota]] para Links Markdown Padrã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:
- 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)
- Salve o arquivo como:
Atividade_13_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_13_4_SeuNome - 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))