10 điểm bởi GN⁺ 2025-11-24 | 7 bình luận | Chia sẻ qua WhatsApp
  • Markdown, vốn được dùng rộng rãi để viết tài liệu phát triển, rất phổ biến nhờ tính đơn giản và dễ tiếp cận, nhưng có giới hạn với tài liệu kỹ thuật quy mô lớn do thiếu khả năng biểu đạt cấu trúc
  • Markdown hoạt động như một hệ thống kiểu ngầm định, khiến việc đảm bảo tính nhất quán hay kiểm tra schema là bất khả thi; đồng thời cũng tồn tại vấn đề tương thích giữa các biến thể Markdown (flavor) khác nhau
  • Các cú pháp mở rộng như MDX giúp tăng khả năng biểu đạt, nhưng lại làm độ phức tạp tăng thêm do thiếu tính di động và tiêu chuẩn hóa giữa các hệ thống
  • reStructuredText, AsciiDoc, DocBook, DITA cung cấp cấu trúc tường minh và semantic markup để tăng khả năng tái sử dụng và khả năng được máy diễn giải
  • Với tài liệu nhỏ, Markdown là đủ, nhưng để quản lý tài liệu quy mô lớn, đa kênh, cần chuyển sang các định dạng có cấu trúc

Giới hạn về cấu trúc của Markdown

  • Markdown có cú pháp đơn giản, dễ đọc với con người, cho phép tạo tài liệu đẹp mắt trên GitHub hoặc các trang web tĩnh
    • Tuy nhiên, nó không mô tả được ý nghĩa của nội dung, nên thiếu thông tin cấu trúc để máy có thể hiểu được
  • Công cụ tìm kiếm, LLM, IDE, AI agent... đều tận dụng cấu trúc ngữ nghĩa của tài liệu, nhưng Markdown chỉ tạo ra số lượng giới hạn các thẻ HTML
  • Markdown gây ra vấn đề thiếu nhất quán khi tái sử dụng hoặc tích hợp nội dung do khác biệt cú pháp giữa các nền tảng
  • Kết quả là Markdown chỉ là một định dạng ở mức mẫu số chung tối thiểu, không phù hợp cho quản lý tài liệu phức tạp

Vấn đề kiểu ngầm định của Markdown

  • Markdown là một định dạng không có schema hay định nghĩa kiểu tường minh, nên cùng một tiêu đề hay danh sách có thể mang ý nghĩa khác nhau tùy theo ngữ cảnh
  • Có nhiều biến thể Markdown (flavor) khác nhau, nên xảy ra khác biệt khi render giữa các công cụ
    • Ví dụ: công cụ này hỗ trợ footnote, nhưng công cụ khác lại bỏ qua
  • MDX mở rộng khả năng biểu đạt bằng cách chèn component React, nhưng tính di động kém do vấn đề tương thích giữa các hệ thống
  • Những phần mở rộng này là nỗ lực để bù đắp giới hạn của Markdown, nhưng rốt cuộc chỉ là giải pháp chắp vá tạm thời chưa được tiêu chuẩn hóa
Quảng cáo

Tầm quan trọng của semantic markup

  • Semantic markup mô tả ý nghĩa của nội dung thay vì hình thức của nó
    • Ví dụ: “bước (step)” và “mục trong danh sách” có thể trông giống nhau về mặt thị giác nhưng khác nhau về ý nghĩa
  • HTML5 đã đưa vào các thẻ dựa trên ngữ nghĩa như <section>, <article>, <aside> để tăng cường khả năng biểu đạt cấu trúc
  • Các lợi ích cốt lõi của semantic markup
    • Chuyển đổi và tái sử dụng: có thể chuyển cùng một nội dung sang nhiều định dạng như HTML, PDF, ePub
    • Khả năng được máy diễn giải: LLM hoặc agent có thể nhận diện cấu trúc rõ ràng để đưa ra phản hồi chính xác hơn
  • Markdown không cung cấp được loại thông tin cấu trúc này, nên xảy ra mất mát thông tin khi hậu xử lý hoặc chuyển đổi

So sánh các định dạng thay thế

  • reStructuredText
    • Là định dạng được dùng trong Sphinx của hệ sinh thái Python, biểu đạt ý nghĩa cấu trúc thông qua directiverole
    • Hỗ trợ các phần tử cấu trúc tường minh như code block, note, tham chiếu chéo (:ref:)
    • Phù hợp với tài liệu kỹ thuật quy mô lớn và hỗ trợ tạo HTML lẫn PDF
  • AsciiDoc
    • định dạng văn bản ngữ nghĩa cung cấp attribute, conditional content, và tính năng include
    • Hỗ trợ cách biểu đạt chuyên cho tài liệu kỹ thuật như NOTE, WARNING, thành phần UI, cách ghi phím tắt
    • Có thể chuyển sang HTML, PDF, ePub, DocBook... thông qua AsciiDoctor
    Quảng cáo
  • DocBook (XML)
    • mô hình dựa trên XML cho xuất bản kỹ thuật, cung cấp hệ thống thẻ có ngữ nghĩa như <command>, <note>, <xref>
    • Bao gồm các thẻ cần thiết cho tài liệu chuyên môn như bảng thuật ngữ, chỉ mục, thành phần UI, tên hàm
    • Có thể chuyển sang nhiều định dạng đầu ra khác nhau thông qua stylesheet XSLT
    • Có lợi cho kiểm tra cấu trúc tài liệu quy mô lớn và tạo chỉ mục
  • DITA (Darwin Information Typing Architecture)
    • cấu trúc dựa trên XML dạng mô-đun được dùng như tiêu chuẩn tài liệu kỹ thuật doanh nghiệp
    • kiến trúc XML dựa trên topic, định nghĩa rõ ràng cấu trúc thủ tục như <task>, <step>
    • Được dùng như tiêu chuẩn quản lý tài liệu doanh nghiệp cho tái sử dụng nội dung (conref), lọc và xuất bản đa kênh
    • Hỗ trợ tự động hóa render và chuyển đổi thông qua DITA Open Toolkit

Vì sao XML trông có vẻ bất tiện nhưng vẫn cần thiết

  • Markdown tuy nhẹ, nhưng là một giải pháp tạm thời thiếu cấu trúc, tiêu chuẩn và tính nhất quán
  • Nếu bạn đang làm Markdown phức tạp thêm bằng MDX, plugin và script tùy biến,
    thì về lâu dài, việc áp dụng hẳn một định dạng có cấu trúc sẽ ổn định hơn

Vậy nên làm gì?

  • Với tài liệu quy mô nhỏ như README hay tài liệu dùng một lần, Markdown là đủ; nhưng với tài liệu quy mô lớn, có tái sử dụng, đa kênh, reStructuredText, AsciiDoc, DocBook, DITA phù hợp hơn
  • Nếu cần tài liệu hoạch định, tài liệu cho developer, tái sử dụng, quản lý quy mô lớn, hãy cân nhắc theo thứ tự reST/AsciiDoc → DocBook/DITA
  • Cách tiếp cận hợp lý là dùng định dạng có cấu trúc phong phú nhất làm nguồn, rồi chuyển sang Markdown khi cần
  • Markdown hữu ích như định dạng đầu ra, nhưng nếu dùng làm nguồn chân lý duy nhất (source of truth) thì rất khó mở rộng về mặt cấu trúc
  • Tối ưu nhất là đặt bản gốc ở định dạng giàu cấu trúc ngữ nghĩa, còn Markdown dùng cho đầu ra downstream

7 bình luận

 
savvykang 2025-11-24

Thực tế của các định dạng dựa trên XML và tiêu chí lựa chọn
Với các tài liệu nhỏ như README hoặc tài liệu dùng một lần, Markdown là đủ, nhưng
với tài liệu quy mô lớn, có khả năng tái sử dụng và xuất bản đa kênh thì reStructuredText, AsciiDoc, DocBook, DITA phù hợp hơn

rst có phải là định dạng dựa trên XML không? Tôi mới nghe lần đầu đấy. Bản tóm tắt này có vấn đề.

 
xguru 2025-11-24

Có vẻ tiêu đề được viết như vậy vì trong phần tóm tắt, tác giả nói về tiêu chí lựa chọn khi gộp nó cùng các định dạng XML khác.
Tôi đã sửa lại cho khớp với nguyên văn.

 
jjw9512151 2025-11-24

Nếu cần thì dùng HTML trong Markdown rồi gắn thêm Mermaid vào cũng tạm ổn... nhưng vượt quá mức đó thì có vẻ lại thành công việc vì tài liệu, vì công việc làm tài liệu.

 
ahwjdekf 2025-11-24

Con người vẫn phải được đặt lên trước AI. Đừng ăn cắp thứ tôi đã viết. Nói gì mà ngữ nghĩa chứ.

 
slowandsnow 2025-11-24

Nếu phải dùng cú pháp đặc biệt thì lại phát sinh thêm một đường cong học tập khác, bộ công cụ phân tích cú pháp chuyên dụng, trình xem, trình soạn thảo v.v., tất cả đều phải được hỗ trợ trơn tru mới khả thi.. đến mức đó thì có lẽ cứ dùng Google Docs hoặc Notion, vốn có thể kết nối mượt mà với hầu hết các dịch vụ AI, còn tốt hơn

 
GN⁺ 2025-11-24
Ý kiến trên Hacker News
  • Điểm cốt lõi của Markdown là mức độ được hỗ trợ rất rộng, điều mà các ngôn ngữ khác không có Hầu hết các lựa chọn thay thế đều cần công cụ riêng và không dùng được trong những môi trường đã hỗ trợ Markdown sẵn Ngay cả Google Docs cũng hỗ trợ dán Markdown như một tính năng ẩn Dù không hoàn hảo, ưu điểm là “có thể dùng ở mọi nơi” Cũng như HTML đơn giản hơn SGML nhưng trở thành tiêu chuẩn nhờ được trình duyệt hỗ trợ, Markdown cũng có thể phát triển theo thời gian Sự mơ hồ trong tiêu chuẩn hóa, thiếu tính năng, vấn đề tương thích... đều giống với thời kỳ HTML4 Thay vì thay thế hoàn toàn, tiến hóa dần dần có lẽ là con đường thực tế hơn

    • Một ưu điểm khác của Markdown là ai cũng có thể học trong 5 phút Trước đây tôi từng triển khai cho các phóng viên ở tòa soạn, và chỉ sau một ngày họ đã thấy nó tiện hơn MS Word Điểm hấp dẫn là nội dung nhập vào ra kết quả đúng như vậy mà không cần định dạng phức tạp Đây là định dạng mà cả người không chuyên kỹ thuật cũng dễ làm quen
    • Tôi nghĩ Markdown đã là người chiến thắng trên thực tế Nếu khách hàng muốn Word hay PDF thì tôi gửi như vậy, nhưng rốt cuộc người nhận mới là bên quyết định định dạng Khối mã chỉ cần dấu backtick là đủ, còn bảng hay sơ đồ phức tạp thì có thể bổ sung bằng HTML
    • Đặc tính quan trọng của Markdown là dễ đọc ngay cả dưới dạng văn bản thuần Nó dễ đọc hơn LaTeX hay HTML rất nhiều Có thể xem nó như một ngôn ngữ đánh dấu cấp cao được biên dịch sang HTML Khi cần thì vẫn có thể trộn trực tiếp HTML vào
    • Đúng là Markdown được dùng rất rộng, nhưng không có lý do kỹ thuật nào ngăn cản các ngôn ngữ khác Chỉ là vì yếu tố xã hội nên việc mở rộng diễn ra chậm Nó không có cú pháp có tổ chức như HTML nên khó mở rộng Đã có vô số phương ngữ Markdown, nhưng phần lớn chỉ giới hạn trong một số ít công cụ CommonMark là thứ gần tiêu chuẩn nhất Ngay cả nếu đưa vào một hệ thống mở rộng, tôi vẫn nghĩ khả năng thành công thấp vì vấn đề xung đột cú pháp
    • Markdown có thể phát triển tiếp, nhưng không có một quyền lực trung tâm Có CommonMark, nhưng đó chỉ là mức mô tả kỹ thuật chứ không phải chuẩn tắc
  • Markdown có thể chứa thẻ HTML ở bất kỳ đâu Tài liệu chính thức cũng nói rõ điều này Vì vậy những ràng buộc mà tác giả nêu ra thực tế không tồn tại

    • Ai cũng biết là có thể nhúng HTML Nhưng lý do dùng Markdown là để không phải tự gõ HTML Nếu vẫn phải liên tục viết các thẻ như hay thì chẳng còn lý do gì để dùng Markdown Nếu câu trả lời cuối cùng là “cứ dùng HTML đi”, thì lý do tồn tại của Markdown cũng biến mất
    • Trên thực tế không thể trộn tự do HTML và Markdown Khi có khối HTML, cú pháp Markdown sẽ bị vô hiệu hóa AsciiDoc linh hoạt hơn hẳn ở điểm này
    • Tôi cũng dùng Pandoc và Markdown, nhưng không có ý định quay lại AsciiDoc hay LaTeX Hầu hết nơi đều hỗ trợ chú thích chân trang và mục lục, và như vậy là đủ cho công việc dựa trên văn bản thông thường Tôi không cần công thức hay các thứ như nút bấm
    • Cũng có những nền tảng như Reddit hay GitHub chặn HTML vì lý do bảo mật Vì để người dùng không đáng tin cậy viết HTML là nguy hiểm
    • Tôi cũng từng đưa các yếu tố tương tác vào tài liệu Markdown Hiện giờ tôi chỉ dùng Markdown để viết nội dung
  • Thời đại học, khi học vật lý, tôi đã viết luận văn bằng LaTeX Bên hóa học thì dùng Word, tiêu chuẩn khác nhau tùy lĩnh vực Phiên bản của TeX biểu thị mức độ hoàn thiện mục tiêu bằng cách tiến gần tới giá trị π Phiên bản hiện tại là 3.141592653, và đã được duy trì ổn định suốt 47 năm Xem wiki về TeX, giải thích về phiên bản π Với công cụ CLI thì định dạng manpage cũng hữu ích

    • Tôi từng học viết tài liệu bằng LaTeX từ thời đại học, nhưng giờ tôi khuyên dùng Typst hơn Tôi nghĩ đây là ứng viên hứa hẹn nhất cho vai trò kế nhiệm LaTeX
    • Viết tài liệu cần ít ma sát LaTeX có rào cản gia nhập cao và là định dạng dàn trang hơn là định dạng tài liệu, nên khá kém hiệu quả Tài liệu nên tập trung vào nội dung hơn là hình thức
    • Tôi là người duy nhất viết luận văn bằng Word Tôi đã khá vất vả vì phải dùng font LaTeX và sửa lỗi PDF, nhưng nhìn chung vẫn ổn Theo nghiên cứu, người dùng LaTeX bỏ ra nhiều thời gian hơn nhưng mức hài lòng với quá trình lại cao hơn Nó giống như công cụ cho “những người thích thú với việc tạo ra thứ gì đó”
  • Markdown giống như một sản phẩm khả dụng tối thiểu (MVP) Nó dễ học và vẫn dễ đọc ngay cả khi chưa được render Việc tạo PDF của tôi đã chuyển từ AsciiDoc sang Typst, và nó giải quyết được vấn đề khả năng truy cập Nhưng không có ngôn ngữ đánh dấu nào tự nó làm cho bài viết hay hơn Đổi bút không làm cho văn hay hơn

    • Tôi nghĩ tác giả đã nhầm lẫn giữa hai mục đích sử dụng Markdown dành cho những người cần tạo nội dung nhanh Nó không phù hợp với người theo đuổi độ hoàn chỉnh về mặt cấu trúc Có lẽ sẽ không có ngôn ngữ nào đáp ứng được cả hai mục tiêu
    • Một lựa chọn thay thế cho Markdown tên là Djot cũng khá thú vị Xem liên kết GitHub
    • LaTeX khiến bạn phải thêm chú thích cho từng đoạn nên buộc bạn suy nghĩ sâu hơn về bài viết
    • Typst trông khá thú vị, nhưng hiện tại chỉ có web editor và plugin VSCode nên hệ sinh thái còn hạn chế
  • Giọng điệu của bài này là lập luận rằng “Markdown đang cản trở sự phát triển của LLM” Nhưng giả định rằng có thể tự động có được sự phong phú về ngữ nghĩa là thiếu thực tế Trong nhóm của tôi chẳng ai có thời gian làm việc đó, và Markdown là đủ dùng Giống như các cuộc thảo luận về semantic web, rốt cuộc vấn đề vẫn là ai sẽ quản lý dữ liệu

  • Tôi viết blog bằng Org-mode + Emacs Tôi đặc biệt thích khả năng liên kết các khối mã để có thể chạy chúng ngay trong tài liệu Tôi cũng từng thử các nền tảng như Blorgit, lazyblorg, nhưng cấu hình phiền phức nên cuối cùng tôi tự xuất ra HTML rồi dùng rsync để đẩy lên server Tôi dùng script Ruby để gắn chỉ mục rồi triển khai Nó giàu khả năng biểu đạt và tự nhiên hơn nhiều so với Markdown

    • Nếu Org-mode không bị trói vào Emacs thì có lẽ nó đã trở thành định dạng mặc định
    • Tôi muốn hỏi liệu bạn đã thử Ox-Hugo chưa Đây là một hệ thống tuyệt vời để xuất file Org sang blog Hugo
    • Org-mode gắn với Emacs quá chặt nên khó di chuyển sang môi trường khác Nếu có LSP thì có lẽ nó sẽ dùng được ở nhiều môi trường hơn
  • Tôi phần nào đồng ý với nhận định “Markdown thiếu cấu trúc”, nhưng thấy cách tiếp cận nhị nguyên ở đây khá đáng tiếc Trước khi chọn định dạng, lẽ ra phải hiểu trước cấu trúc cần thiết là gì Vì vậy tôi vừa thấy hơi khó chịu vừa khó mà hoàn toàn đồng tình

  • Việc đưa DITA ra như một lựa chọn thay thế Markdown là lập luận chệch hướng hoàn toàn DITA là một hệ thống XML cho doanh nghiệp quy mô lớn, mục đích hoàn toàn khác với Markdown Nó chỉ phù hợp trong môi trường có hơn 5.000 người, dòng sản phẩm đa ngôn ngữ và tương tự Nếu đang ở hoàn cảnh dùng Markdown thì DITA chắc chắn không phù hợp Cả hai đều là phí thời gian

    • Trước giờ tôi không biết DITA, nhưng câu kiểu “nếu Markdown phức tạp thì hãy dùng XML” nghe buồn cười quá
    • Tôi muốn nghe thêm về DITA và các ca thất bại của chuỗi công cụ quanh nó
  • Tôi đã dùng Markdown hơn 10 năm và nó vẫn hoạt động tốt Lập luận trong bài cũng không hoàn toàn sai, nhưng đó không phải vấn đề mà người dùng Markdown đang cảm nhận Cần gì thì cứ dùng cái khác Dù vậy tiêu đề hay nên tôi đã đọc khoảng 5 phút

  • Thật lạ khi bài viết nhắc đến MyST như một dạng Markdown rồi lại lấy reStructuredText (rST) làm ví dụ Mục đích của MyST chính là thay thế rST Cú pháp mang phong cách Markdown, nhưng vẫn hỗ trợ đầy đủ ý nghĩa cấu trúc, directive, role, v.v. Có thảo luận liên quan trong issue của Sphinx

 
mstorm 2025-11-24

Dạo này thấy khá nhiều bài kiểu này.

Tệp văn bản, Markdown, rồi các định dạng có cấu trúc hơn.
Khi chuyển đổi như vậy thì không có gì là đáp án đúng tuyệt đối, chỉ cần dùng đúng định dạng vào đúng thời điểm thích hợp.

Và nếu lúc nào cũng cố làm mọi thứ trong một tệp duy nhất thì sẽ phát sinh vấn đề, nên việc phân loại và hệ thống hóa cho phù hợp với chủ đề là điều tất yếu.