Câu trả lời:
Các standalone
tuyên bố là một cách để nói với các phân tích cú pháp để bỏ qua bất kỳ khai báo đánh dấu trong DTD . DTD sau đó chỉ được sử dụng để xác nhận.
Ví dụ, xem xét các <img>
thẻ khiêm tốn . Nếu bạn nhìn vào XHTML 1.0 DTD , bạn sẽ thấy một khai báo đánh dấu cho trình phân tích cú pháp rằng <img>
các thẻ phải là EMPTY và sở hữu src
và alt
các thuộc tính. Khi một trình duyệt đi qua một tài liệu XHTML 1.0 và tìm thấy một <img>
thẻ, nó sẽ nhận thấy rằng DTD yêu cầu src
và alt
các thuộc tính và thêm chúng nếu chúng không có mặt. Nó cũng sẽ tự đóng <img>
thẻ vì nó được coi là EMPTY. Đây là những gì đặc tả XML có nghĩa là "khai báo đánh dấu có thể ảnh hưởng đến nội dung của tài liệu." Sau đó, bạn có thể sử dụng standalone
khai báo để báo cho trình phân tích cú pháp bỏ qua các quy tắc này.
Có hay không trình phân tích cú pháp của bạn thực sự làm điều này là một câu hỏi khác, nhưng một trình phân tích cú pháp xác thực tuân thủ tiêu chuẩn (như trình duyệt) nên.
Lưu ý rằng nếu bạn không chỉ định DTD, thì khai báo độc lập "không có nghĩa", vì vậy không có lý do gì để sử dụng trừ khi bạn cũng chỉ định DTD.
standalone=yes
, khai báo đánh dấu không được bỏ qua, thay vào đó chúng làm cho tài liệu là XML không hợp lệ. Bạn có phiền nếu tôi chỉnh sửa nó thành câu trả lời không?
yes
và no
, đâu no
là giá trị mặc định.standalone="yes"
có nghĩa là bộ xử lý XML phải sử dụng DTD chỉ để xác thực. Trong trường hợp đó, nó sẽ không được sử dụng cho:
standalone="yes"
có thể thêm các ràng buộc hợp lệ nếu tài liệu sử dụng DTD bên ngoài. Khi tài liệu chứa những thứ sẽ yêu cầu sửa đổi XML, chẳng hạn như các giá trị mặc định cho các thuộc tính và standalone="yes"
được sử dụng thì tài liệu không hợp lệ .standalone="yes"
có thể giúp tối ưu hóa hiệu suất xử lý tài liệu.Nguồn: Thuộc tính giả độc lập chỉ có liên quan nếu sử dụng DTD
standalone
mô tả nếu tài liệu XML hiện tại phụ thuộc vào khai báo đánh dấu bên ngoài.
W3C mô tả mục đích của nó trong "Ngôn ngữ đánh dấu mở rộng (XML) 1.0 (Phiên bản thứ năm)":
Khai báo đánh dấu có thể ảnh hưởng đến nội dung của tài liệu, khi được chuyển từ bộ xử lý XML sang ứng dụng; ví dụ là mặc định thuộc tính và khai báo thực thể. Khai báo tài liệu độc lập, có thể xuất hiện như một thành phần của khai báo XML, báo hiệu cho dù có các khai báo đó xuất hiện bên ngoài thực thể tài liệu hay trong các thực thể tham số hay không. [Định nghĩa: Một khai báo đánh dấu bên ngoài được định nghĩa là một khai báo đánh dấu xảy ra trong tập hợp con bên ngoài hoặc trong một thực thể tham số (bên ngoài hoặc bên trong, cái sau được bao gồm vì bộ xử lý không xác thực không bắt buộc phải đọc chúng).]
Mục đích của standalone=yes
tuyên bố là đảm bảo rằng thông tin bên trong tài liệu có thể được truy xuất một cách trung thực chỉ dựa trên DTD nội bộ, tức là tài liệu có thể "độc lập" mà không cần tham chiếu bên ngoài. Xác thực một tài liệu độc lập đảm bảo rằng các bộ xử lý không xác thực sẽ có tất cả thông tin có sẵn để phân tích chính xác tài liệu.
Khai báo độc lập không phục vụ mục đích nếu một tài liệu không có DTD bên ngoài và DTD bên trong không có tham chiếu thực thể tham số, vì các tài liệu này đã hoàn toàn độc lập.
Sau đây là những tác dụng thực tế của việc sử dụng standalone=yes
.
Buộc các bộ xử lý đưa ra lỗi khi phân tích tài liệu bằng tham chiếu thực thể tham số DTD hoặc tham số bên ngoài, nếu tài liệu chứa tham chiếu đến các thực thể không được khai báo trong DTD nội bộ (ngoại trừ văn bản thay thế của các thực thể tham số vì không yêu cầu bộ xử lý không hợp lệ phân tích cái này); amp
,lt
, gt
, apos
, Và quot
là những trường hợp ngoại lệ duy nhất
Khi phân tích cú pháp một tài liệu không được khai báo là độc lập, bộ xử lý không xác thực sẽ tự do dừng phân tích cú pháp DTD nội bộ ngay khi nó gặp một tham chiếu thực thể tham số. Khai báo một tài liệu dưới dạng độc lập buộc các bộ xử lý không xác thực phải phân tích các khai báo đánh dấu trong DTD nội bộ ngay cả sau khi chúng bỏ qua một hoặc nhiều tham chiếu thực thể tham số.
Buộc các bộ xử lý xác nhận đưa ra lỗi nếu tìm thấy bất kỳ lỗi nào sau đây trong tài liệu và các khai báo tương ứng của chúng nằm trong DTD bên ngoài hoặc trong văn bản thay thế thực thể tham số:
amp
, lt
, gt
, apos
, và quot
)Bộ xử lý không xác thực có thể xem xét truy xuất DTD bên ngoài và mở rộng tất cả các tham chiếu thực thể tham số cho các tài liệu không độc lập, mặc dù không có nghĩa vụ phải làm như vậy, tức là cài đặt standalone=yes
về mặt lý thuyết có thể cải thiện hiệu suất cho bộ xử lý không xác thực (cảnh báo spoiler: nó có lẽ sẽ không làm cho một sự khác biệt).
Các câu trả lời khác ở đây là không đầy đủ hoặc không chính xác, quan niệm sai lầm chính là
Khai báo độc lập là một cách để nói cho trình phân tích cú pháp bỏ qua mọi khai báo đánh dấu trong DTD. DTD sau đó chỉ được sử dụng để xác nhận.
standalone = "yes" có nghĩa là bộ xử lý XML phải sử dụng DTD chỉ để xác thực.
Hoàn toàn ngược lại, việc khai báo một tài liệu là độc lập sẽ thực sự buộc một bộ xử lý không xác thực để phân tích các khai báo bên trong mà nó thường phải bỏ qua (tức là các tài liệu sau một tham chiếu thực thể tham số bị bỏ qua). Bộ xử lý không xác thực vẫn phải sử dụng thông tin trong DTD nội bộ để cung cấp các giá trị thuộc tính mặc định và chuẩn hóa các thuộc tính được mã hóa, vì điều này không phụ thuộc vào xác thực.