2011-01-31 30 views
24

Tôi có kiến ​​thức hạn chế về tệp XML/Schema.Cách sử dụng Lược đồ trên máy cục bộ trong tài liệu XML

Vì vậy, đây phải là một câu hỏi khá đơn giản. Làm thế nào để bạn chỉ định một tệp cục bộ cho 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"> 
    ... 
</note> 

Đây là mẫu từ www.w3.org và phần chỉ định lược đồ nằm trong schemaLocation. Tôi đã thử xem tài liệu, nhưng làm cách nào bạn có thể chỉ định tệp cục bộ?

Something như

xsi:schemaLocation="../relativepath/schemafolder not.xsd"> 

Cảm ơn

Trả lời

24

schemaLocation có chứa hai giá trị cách nhau bởi khoảng trắng: namespace URI (điều này không thay đổi) và url schema.

Vì vậy, trong trường hợp của bạn

xsi:schemaLocation="http://www.w3schools.com ../relativepath/schemafolder/note.xsd"> 

Đừng để bị lừa bởi các namespace URI là một url http dường như hợp lệ, đó chỉ là một trong những madnesses chút XML người phát minh. :)

Trên thực tế, bạn có thể chỉ định schemas cho nhiều không gian tên trong một schemaLocation:

xsi:schemaLocation="namespace1 schemaurl1 namespace2 schemaurl2 ..." 

(Tôi cũng khuyên bạn nên sử dụng đường dẫn tương đối cẩn thận: trong khi họ là cực kỳ hữu ích khi bạn di chuyển các file của bạn xung quanh nhưng vẫn xác nhận nó với cùng một mã (hoặc công cụ), khi bạn triển khai mã xác nhận của bạn trong một ứng dụng, "thư mục làm việc" có thể không phải là những gì bạn mong đợi. nhận thức được điều này khi bạn nhận được ngoại lệ trông lạ mắt về lược đồ không tìm thấy.)

+0

Vì vậy, liên kết không phải là hợp lệ ??? Tôi vẫn phải đặt một cái gì đó trong đó? Ngay cả khi nó không được sử dụng? – grobartn

+2

@grobartn Đó không phải là liên kết. Nó trông giống như một liên kết, nhưng trên thực tế nó chỉ là một cái tên. Nó được gọi là URI không gian tên (không phải là một URL!) Và nó không liên quan gì tới việc liên kết. Đối số thứ hai của schemaLocation là url (hoặc đường dẫn) trỏ đến tệp lược đồ của bạn. – biziclop

+2

@biziclop - một URI không gian tên không phải là 'chỉ là một tên', nó phải là một URI hợp lệ. Tuy nhiên, bạn đang ở trong đó bằng cách sử dụng URL HTTP hợp lệ cú pháp (và URL chỉ là một tập con của URI) có xu hướng gây nhầm lẫn khủng khiếp cho mọi người. Tôi luôn thích phương pháp OASIS/ODF sử dụng URN. –

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