Cấu trúc của tài liệu Google Tài liệu

Để sử dụng API Google Tài liệu một cách hiệu quả, bạn phải hiểu rõ cấu trúc của một tài liệu trên Google Tài liệu và các phần tử tạo nên một tài liệu, cũng như mối quan hệ giữa các phần tử đó. Trang này cung cấp thông tin tổng quan chi tiết về các chủ đề sau:

  • Mô hình khái niệm về các phần tử trong tài liệu
  • Cách Docs API biểu thị các phần tử này
  • Các thuộc tính tạo kiểu của phần tử

Phần tử cấp cao nhất

Phần tử vùng chứa ngoài cùng trong Google Tài liệu là một tài liệu. Đây là đơn vị có thể được lưu trong Google Drive, chia sẻ với người dùng khác và cập nhật bằng văn bản và hình ảnh.

Các phần tử cấp cao nhất của tài nguyên documents bao gồm Tab, SuggestionsViewMode và các thuộc tính khác:

document: {
    title: ... ,
    revisionId: ... ,
    documentId: ... ,
    suggestionsViewMode: ... ,
    tabs: ...
}

Tab

Một tài liệu có thể chứa nhiều thẻ có nội dung ở cấp văn bản khác nhau. Thuộc tính tabs của tài liệu là một chuỗi các đối tượng Tab. Tab bao gồm các trường sau:

  • TabProperties: Chứa các thuộc tính của thẻ, chẳng hạn như mã nhận dạng, tiêu đề và chỉ mục.
  • childTabs: Hiển thị các thẻ con của một thẻ (các thẻ được lồng trực tiếp bên dưới thẻ đó).
  • DocumentTab: Đại diện cho nội dung văn bản của một thẻ.
Cấu trúc của các thẻ trong tài liệu.
Hình 1. Cấu trúc của các thẻ trong tài liệu.

Các phần sau này sẽ cung cấp thông tin tổng quan ngắn gọn về hệ thống phân cấp thẻ tài liệu; biểu thị JSON của thẻ cũng cung cấp thông tin chi tiết hơn. Hãy xem bài viết Làm việc với thẻ để biết thêm thông tin về tính năng thẻ.

Để thao tác các tính năng của thẻ tài liệu chung bên ngoài nội dung Body, bạn nên sử dụng một hoặc nhiều mẫu tài liệu (bạn có thể dùng làm cơ sở để tạo tài liệu mới theo phương thức lập trình). Để biết thêm thông tin, hãy xem bài viết Hợp nhất văn bản vào tài liệu.

Nội dung

Body thường chứa toàn bộ nội dung của một thẻ trong tài liệu. Hầu hết các mục mà bạn có thể hoặc có khả năng muốn sử dụng theo phương thức lập trình đều là các phần tử trong nội dung Body:

Cấu trúc của nội dung.
Hình 2. Cấu trúc của nội dung.

Phần tử kết cấu

StructuralElement mô tả nội dung cung cấp cấu trúc cho tài liệu. Nội dung Body là một chuỗi các đối tượng StructuralElement. Một phần tử nội dung sẽ cá nhân hoá từng đối tượng StructuralElement, như minh hoạ trong sơ đồ sau:

Các thành phần cấu trúc.
Hình 3. Các thành phần cấu trúc.

Các phần tử cấu trúc và đối tượng nội dung của chúng chứa tất cả các thành phần trực quan trong tài liệu. Nội dung này bao gồm văn bản, hình ảnh nội tuyến và định dạng.

Cấu trúc đoạn

Paragraph là một StructuralElement đại diện cho một đoạn văn. Nội dung này có một dải nội dung được kết thúc bằng ký tự dòng mới. Thư viện này bao gồm các đối tượng sau:

  • ParagraphElement: Mô tả nội dung trong một đoạn văn.
  • ParagraphStyle: Một phần tử không bắt buộc giúp đặt rõ ràng các thuộc tính kiểu cho đoạn văn.
  • Bullet: Nếu đoạn văn là một phần của danh sách, thì đây là một phần tử không bắt buộc cung cấp quy cách dấu đầu dòng.

ParagraphElement hoạt động tương tự như StructuralElement. Một tập hợp các loại phần tử nội dung (chẳng hạn như ColumnBreakEquation) sẽ cá nhân hoá ParagraphElement của riêng mình, như minh hoạ trong sơ đồ sau:

Cấu trúc của các phần tử đoạn văn.
Hình 4. Cấu trúc của các phần tử đoạn văn.

Để xem ví dụ về cấu trúc tài liệu hoàn chỉnh, hãy xem ví dụ về tài liệu ở định dạng JSON. Trong đầu ra, bạn có thể thấy nhiều phần tử nội dung và cấu trúc chính, cũng như việc sử dụng chỉ mục bắt đầu và chỉ mục kết thúc như mô tả trong phần sau.

Đoạn văn bản

TextRun là một ParagraphElement biểu thị một chuỗi văn bản liền mạch có cùng kiểu văn bản. Một đoạn văn có thể chứa nhiều đoạn văn bản nhưng các đoạn văn bản không bao giờ vượt quá ranh giới đoạn văn. Nội dung được chia sau ký tự dòng mới để tạo thành các đoạn văn bản riêng biệt. Ví dụ: hãy xem xét một tài liệu nhỏ như sau:

Tài liệu nhỏ có các đoạn văn và danh sách có dấu đầu dòng.
Hình 5. Một tài liệu nhỏ.

Sơ đồ sau đây cho thấy cách bạn có thể hình dung chuỗi đoạn văn trong tài liệu trước đó, mỗi đoạn văn có chế độ cài đặt TextRunBullet riêng (không bắt buộc).

Cấu trúc của một đoạn văn bản.
Hình 6. Cấu trúc của một đoạn văn bản.

AutoText

AutoText là một ParagraphElement biểu thị một vị trí trong văn bản được thay thế linh hoạt bằng nội dung có thể thay đổi theo thời gian. Trong Tài liệu, giá trị này được dùng cho số trang.

Chỉ mục bắt đầu và kết thúc

Khi bạn cập nhật nội dung của một thẻ tài liệu, mỗi nội dung cập nhật sẽ diễn ra tại một vị trí hoặc trên một dải ô trong tài liệu. Các vị trí và dải ô này được chỉ định bằng cách sử dụng chỉ mục, biểu thị độ lệch trong một phân đoạn tài liệu chứa. Phân đoạn là phần nội dung, tiêu đề, chân trang hoặc chú thích chứa các phần tử cấu trúc hoặc nội dung. Chỉ mục của các phần tử trong một đoạn tương ứng với điểm bắt đầu của đoạn đó.

Hầu hết các phần tử trong nội dung chính đều có các thuộc tính startIndexendIndex dựa trên 0. Các giá trị này cho biết độ lệch của điểm bắt đầu và điểm kết thúc của một phần tử, tương ứng với điểm bắt đầu của đoạn đường bao quanh. Để biết thêm thông tin về cách sắp xếp các lệnh gọi theo lô của Docs API, hãy xem phần Cập nhật theo lô.

Chỉ mục được đo bằng đơn vị mã UTF-16. Điều này có nghĩa là các cặp thay thế sẽ sử dụng 2 chỉ mục. Ví dụ: biểu tượng cảm xúc "MẶT CƯỜI TƯƠI" 😄 được biểu thị dưới dạng \uD83D\uDE00 và sử dụng 2 chỉ mục.

Đối với các phần tử trong nội dung tài liệu, chỉ mục biểu thị độ lệch so với phần đầu của nội dung, tức là phần tử "gốc".

Các loại "cá nhân hoá" cho các phần tử cấu trúc (SectionBreak, TableOfContents, TableParagraph) không có các chỉ mục này vì StructuralElement bao quanh chúng có các trường này. Điều này cũng đúng với các loại cá nhân hoá có trong ParagraphElement, chẳng hạn như TextRun, AutoTextPageBreak.

Truy cập vào các phần tử

Bạn có thể sửa đổi nhiều phần tử bằng phương thức documents.batchUpdate. Ví dụ: bằng cách sử dụng InsertTextRequest, bạn có thể thay đổi nội dung của bất kỳ phần tử nào có chứa văn bản. Tương tự, bạn có thể dùng UpdateTextStyleRequest để áp dụng định dạng cho một dải văn bản có trong một hoặc nhiều phần tử.

Để đọc các phần tử của tài liệu, hãy sử dụng phương thức documents.get để lấy một bản kết xuất JSON của toàn bộ tài liệu. Sau đó, bạn có thể phân tích cú pháp JSON kết quả để tìm giá trị của từng phần tử. Để biết thêm thông tin, hãy xem phần Nội dung tài liệu đầu ra dưới dạng JSON.

Việc phân tích cú pháp nội dung có thể mang lại lợi ích cho nhiều trường hợp sử dụng. Ví dụ: hãy xem xét một ứng dụng lập danh mục tài liệu liệt kê những tài liệu mà ứng dụng tìm thấy. Ứng dụng này có thể trích xuất tiêu đề, mã nhận dạng bản sửa đổi và số trang bắt đầu của các thẻ trong tài liệu, như minh hoạ trong sơ đồ sau:

Cấu trúc của danh mục tài liệu.
Hình 7. Cấu trúc của danh mục tài liệu.

Vì không có phương thức nào để đọc rõ ràng các chế độ cài đặt này, nên ứng dụng của bạn cần lấy toàn bộ tài liệu rồi phân tích cú pháp JSON để trích xuất các giá trị này.

Thừa kế thuộc tính

Một StructuralElement có thể kế thừa các thuộc tính từ các đối tượng gốc của nó. Các thuộc tính của đối tượng, bao gồm cả những thuộc tính mà đối tượng xác định và những thuộc tính mà đối tượng kế thừa, sẽ quyết định giao diện trực quan cuối cùng của đối tượng.

Định dạng ký tự văn bản xác định cách văn bản được hiển thị trong tài liệu, chẳng hạn như in đậm, in nghiêng và gạch dưới. Định dạng mà bạn áp dụng sẽ ghi đè định dạng mặc định được kế thừa từ TextStyle của đoạn văn bản cơ bản. Ngược lại, mọi ký tự mà bạn không đặt định dạng sẽ tiếp tục kế thừa từ kiểu của đoạn văn.

Định dạng đoạn văn xác định cách hiển thị các khối văn bản trong tài liệu, chẳng hạn như căn chỉnh, đường viền và thụt lề. Định dạng mà bạn áp dụng sẽ ghi đè định dạng mặc định được kế thừa từ ParagraphStyle cơ bản. Ngược lại, mọi tính năng định dạng mà bạn không đặt sẽ tiếp tục kế thừa từ kiểu đoạn văn.