2009-02-24 22 views
9

Tôi có một trang web mà khách hàng yêu cầu phải có XHTML hợp lệ. Họ kiểm tra nó bằng cách sử dụng trình xác nhận W3C.Xác thực XHTML, các không gian tên và thuộc tính tùy chỉnh

Tôi muốn thêm namespace của riêng tôi và các thuộc tính vì vậy tôi có thể làm những việc như thế này:

<div my:userid="123"> ... </div> 

Từ những gì tôi hiểu, xác định không gian tên tùy chỉnh là XHTML hoàn toàn hợp lệ, miễn là tôi làm điều này:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="http://www.example.com/my"> 

Tuy nhiên, XHTML của tôi không xác thực được. Vấn đề dường như là trình duyệt tính hợp lệ không thực sự đi ra ngoài và kiểm tra tài liệu DTD tùy chỉnh của tôi cho không gian tên tùy chỉnh của tôi, nó chỉ kiểm tra XHTML với các DTD đã biết. Bất cứ ai cũng có thể làm sáng tỏ cách tôi có thể giải quyết vấn đề này?

+0

Tôi không hiểu tại sao trình xác thực sẽ kiểm tra DTD cho vùng tên. Dù sao, trình duyệt cũng không kiểm tra DTD, và tôi có xu hướng tin rằng bạn không thực sự sử dụng XHTML thích hợp, tức là bạn đã gửi Content-type: tiêu đề văn bản/html cho trang web đó. Nhưng tôi có thể sai. –

Trả lời

6

Đối với XHTML 1.0 bạn bị hạn chế để XHTML 1.0 các yếu tố và các thuộc tính:

Normative Definition of XHTML 1.0

Phiên bản này của XHTML cung cấp một định nghĩa về phù hợp chặt chẽ tài liệu XHTML 1.0, được giới hạn trong các yếu tố và các thuộc tính từ các không gian tên XML và XHTML 1.0.

Sự hiểu biết của tôi là XHTML 2.0 nhằm mục đích cung cấp một khuôn khổ để thực hiện những gì bạn muốn.

5

Từ những gì tôi hiểu, xác định không gian tên tùy chỉnh là hoàn toàn hợp lệ XHTML

Nope. Các không gian tên tùy chỉnh hoàn toàn là cũng được định dạng trong XML, nhưng ‘hợp lệ’ có ý nghĩa cụ thể là mọi phần tử và thuộc tính được sử dụng được khai báo trong lược đồ của tài liệu. Lược đồ đó có thể là một DTD, một lược đồ XML, hoặc một cái gì đó khác, nhưng bạn phải khai báo nó.

Vì vậy, bạn có thể khai báo lược đồ của riêng bạn để thêm thuộc tính tùy chỉnh vào ngôn ngữ và thực sự XHTML Modularization làm cho việc này trở nên rất dễ dàng. Bạn sẽ phải thêm tham chiếu đến DTD dưới dạng <! DOCTYPE> trong phần mở đầu; chỉ cần thiết lập các URI không gian tên không cung cấp cho một bộ xử lý XML bất kỳ móc nào để tìm ra lược đồ đó.

Nhưng sau đó những gì bạn đã viết là "hợp lệ ngôn ngữ của tôi-mà-là-một-bit-like-XHTML" và không phải là "XHTML hợp lệ". Một số "ngôn ngữ của tôi" nổi tiếng, như ‘XHTML + MathML + SVG’, nhưng nó vẫn không phải XHTML như vậy và nếu khách hàng của bạn chết trên “XHTML hợp lệ” thì bạn không thể sử dụng bất kỳ thứ gì trong số họ.

Bạn cũng gặp phải sự cố về trình duyệt tiềm năng, đặc biệt với IE, IE8 (trước IE8) thực hiện một số điều kỳ lạ với họ gọi là phần tử. * EtAttribute *. Và trừ khi bạn đang thực sự phục vụ tài liệu dưới dạng XML Content-Type (mà IE cũng không thể xử lý), tất cả các công cụ không gian tên của bạn không thực sự sử dụng các không gian tên.

Trong HTML5, có một đề xuất cho phép các thuộc tính tùy chỉnh của người dùng (chủ yếu cho mục đích kịch bản) để đi vào các thuộc tính có tên bắt đầu bằng ‘data-’. Nhưng trong khi chờ đợi, phương pháp thông thường là ẩn các giá trị trong một thuộc tính khác, ví dụ: class:

<div class="userid-123">...</div> 

và sau đó trích xuất dữ liệu bằng cách xử lý chuỗi phù hợp trên className in script.

+0

Có, ẩn các giá trị trong thuộc tính lớp là giải pháp dự phòng của tôi, nhưng rõ ràng nó không phải là rất thanh lịch và tôi muốn một cái gì đó ít hơn một chút "bẩn". Giải pháp thanh lịch nhất là tên thuộc tính bắt đầu với dữ liệu như bạn đã đề cập, nhưng có vẻ như bây giờ tôi sẽ phải chờ điều này :-) –

3

Tôi có trang web mà khách hàng yêu cầu phải có XHTML hợp lệ. Họ kiểm tra nó bằng cách sử dụng trình xác thực W3C .

Tôi đã có một số thành công với W3C validator sử dụng, không xmlns=, nhưng lấy tiêu chuẩn XHTML DTD và thêm một vài thuộc tính ở cuối như bobince mô tả ở trên. Tôi đang sử dụng tính năng này để thêm các thuộc tính được hệ thống templating PHPTAL sử dụng, chẳng hạn như

<html metal:define-macro="m"> 

Tôi đồng ý rằng những gì bạn cần không phải là XHTML mà là một siêu XHTML. Tuy nhiên, nếu khách hàng của bạn được chuẩn bị để thử nghiệm đơn giản bằng cách trỏ trình xác thực W3C vào URL của bạn, thì hãy tiếp tục. Để được tư vấn, hãy xem WDG

+0

http://www.alistapart.com/articles/customdtd/ Nếu bạn chạy một tập tin như vậy thông qua trình duyệt tính hợp lệ của W3C, bạn sẽ thấy nó hợp lệ tuyệt vời .... Thật không may, khi bạn hiển thị tập tin trong trình duyệt, biểu tượng] xuất hiện trên màn hình. Không có cách nào xung quanh lỗi này, vì vậy cách tiếp cận này là đúng. – davidcl

+0

Nhưng bài viết tiếp tục nói "Cách tiếp cận * hoạt động * yêu cầu bạn lấy DTD XHTML và thêm các sửa đổi của bạn vào tệp đó." Nó hoạt động đối với tôi trên trình xác thực W3C và cũng là trình xác thực WDG. – cjakeman

0

1.0 không cho phép điều này. Nếu bạn thực sự muốn làm điều này, bạn nên tải xuống dtd hiện có và lưu nó vào máy chủ của bạn và xác định riêng tư thay vì công khai. nhưng xác thực w3c không được thông qua vì nó xác thực đối với số nguyên gốc chỉ

Các vấn đề liên quan