2009-04-11 71 views
19

Bạn tự hỏi, cũng giống như chúng ta sử dụng -declaration để liên kết XML với một DTD, làm cách nào chúng ta thực hiện nó với XSD?Làm thế nào để bạn liên kết XML với XSD?

MSDN mẫu:

<?xml version="1.0"?> 
<Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="Product.xsd"> 
    <ProductName>Rugby jersey</ProductName> 
</Product> 

là nó xsi: noNamespaceSchemaLocation mà không lừa? Hay đây chỉ là một không gian tên khác?

[EDIT] Và là ..line

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

chỉ cho chúng tôi một không gian tên XML độc đáo, hay nó cũng cung cấp thông tin về nơi giản đồ có thể được đặt ở đâu?

Trả lời

17

Hãy thử schemaLocation.

<?xml version="1.0"?> 

<note 
xmlns="http://www.w3schools.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.w3schools.com note.xsd"> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

noNamespaceSchemaĐịa điểm khác nhau. Lưu ý rằng cả hai chỉ thực sự là "gợi ý" về mặt lý thuyết, cho người tiêu dùng của một tài liệu XML. Tôi đã không bao giờ chạy vào một bộ xử lý xml mà không theo họ; sau khi tất cả, đó là một khuyến cáo của W3C. thấy http://www.w3.org/TR/xmlschema-1/

Nhưng trên thực tế, nó có thể đi sai, như here, nhưng sau đó một lần nữa, nó được coi là một lỗi vì một lý do.

Để đi ngắn: Tôi chỉ tin tưởng nó, không có hại cho đến nay :-)

Tôi không nghĩ rằng bất kỳ bộ xử lý nửa phong nha xml có thể bỏ qua điều này 'gợi ý' những ngày này.

Các url luôn là duy nhất, nhưng trong một số trường hợp, một số thông tin sẽ được cung cấp dưới URL.

+0

Nếu bạn đang chạy trong môi trường có quyền truy cập Internet bị chặn, các lược đồ sẽ không tải. Bên cạnh đó, cú pháp của bạn là sai. Đó là không gian tên vị trí không gian tên vị trí ... –

+2

@Peter Chắc chắn không phải từ W3C. w3schools.com không liên quan gì đến W3C. –

+0

@ John chỉ là một bản sao của W3Schools – Peter

4

xsi: noNamespaceSchemaLocation và xsi: schemaLocation cả hai cung cấp gợi ý cho các bộ xử lý XML, những người quyết định tuân theo các gợi ý đó. Nhưng chúng chỉ là gợi ý. Chúng không nhất thiết khiến cho tài liệu của bạn xác nhận hợp lệ đối với lược đồ.

3

Tôi thường chỉ bao gồm không gian tên và mong rằng nếu ai đó đang xử lý nó quan tâm để xác thực, thì họ sẽ lấy lược đồ và thiết lập môi trường xử lý của họ để có thể tìm thấy XSD. Tôi đã thành công hạn chế với xsi:schemaLocation và các thuộc tính như vậy. Hầu hết các vấn đề thường tập trung xung quanh việc tìm kiếm tập tin XSD. Một số bộ vi xử lý muốn đường dẫn được đưa vào đó là vô số niềm vui nếu XSD nằm trên một hệ thống tệp thay vì một máy chủ web.

Mọi bộ xử lý dường như thực hiện tra cứu hơi khác một chút. Một số sử dụng các đối tượng danh mục lược đồ riêng biệt, một số khác yêu cầu bạn tải và đính kèm các lược đồ riêng biệt. Trừ khi bạn đang cung cấp mã để xử lý tài liệu, tốt nhất bạn nên không bao gồm xsi:schemaLocation hoặc xsi:noNamespaceSchemaLocation IMHO. Điều duy nhất mà sự bao gồm của họ có thể làm là cuộn dây bất cứ ai đang xử lý tài liệu của bạn vào hoặc đặt giản đồ trong cùng một vị trí hoặc tìm cách nào đó để làm cho bộ xử lý đã chọn của họ bỏ qua hoặc giải quyết các đặc điểm kỹ thuật vị trí.

Là một lưu ý phụ, vấn đề lớn nhất mà tôi đã gặp phải thực sự với DTD được chỉ định bằng cách sử dụng tuyên bố SYSTEM được gọi là "c:\somepath\doc.dtd". Vấn đề là tôi đã xử lý các tài liệu trên một hộp FreeBSD. Tôi đã kết thúc viết trình phân giải của riêng mình để ánh xạ đường dẫn kiểu Windows tới hệ thống tệp cục bộ vì tôi không thể tự sửa đổi tài liệu và được yêu cầu xác thực chúng.

3

Nó không phải là một câu hỏi ngu ngốc, nhưng John Saunders has it right.

giống như chúng tôi sử dụng -decleration để liên kết XML với DTD, làm cách nào chúng tôi thực hiện với XSD?

Đây là bản chất của sự cố - bạn không thể. Một trong những vấn đề với phương pháp tiếp cận DTD là tài liệu đã xác định cơ chế xác nhận và không phải là người tiêu dùng tài liệu. Post-DTD, bạn có thể lấy một tài liệu XML và xác nhận nó bằng XSD hoặc RELAX NG hoặc một số cơ chế khác - chúng được tách riêng (theo lý thuyết ít nhất). Bất kỳ liên kết XSD nào cũng chỉ là một gợi ý và là tùy chọn. It is not possible to validate an arbitrary document.

+0

@McDowell: Cảm ơn rất nhiều. –

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