2011-11-19 39 views
15

Chúng tôi đang viết một lược đồ xsd mới dựa trên và tham chiếu lược đồ khác (đó là tiêu chuẩn thực tế cho dữ liệu GPS gọi là GPX). Lược đồ của chúng tôi sẽ được sử dụng để xác thực các tài liệu do khách hàng của chúng tôi tạo ra và trong quá trình thử nghiệm. Tôi cần hiểu rõ hơn cách tham chiếu lược đồ cơ sở từ lược đồ mới của chúng tôi, đặc biệt là các hệ thống của chúng tôi không thể dự kiến ​​có kết nối Internet.Khái niệm cơ bản của việc tham chiếu lược đồ xsd từ lược đồ khác

Sự hiểu biết của tôi là tham chiếu đến tài liệu xsd tại một số máy chủ khác thường có để nhà phát triển có thể truy xuất tài liệu trong quá trình phát triển, nhưng trong quá trình xác thực thời gian chạy hệ thống, bạn nên có bản sao cục bộ. sẽ không thận trọng khi treo sản xuất đơn giản vì máy chủ từ xa không thể truy cập được. Điều này có đúng không?

Vì vậy, sau đó nếu đó là trường hợp, không xsd mong đợi tôi để cả tham khảo các giản đồ XSD cơ sở xa xôi, nhưng cũng là tên và vị trí của một số địa phương bản sao của schema? Hoặc là một tham chiếu như vậy không cần thiết trong tệp lược đồ mới của tôi? Hy vọng rằng có ý nghĩa. Cảm ơn.

Trả lời

27

Để tham chiếu lược đồ khác, đó là quy ước để có lược đồ đó cục bộ với lược đồ "chính" mà bạn đang tham chiếu. Ví dụ, để nhập khẩu một schema trong đó xác định một số loại tái sử dụng:

<xs:import namespace="http://CommonTypesNamespace/CommonTypes" 
      schemaLocation="CommonTypes.xsd"/> 

này về cơ bản nói rằng có tồn tại một schema gọi CommonTypes.xsd sẽ được tìm thấy trong cùng thư mục với schema chính của tôi. Thuộc tính schemaLocation được sử dụng như một đường dẫn tương đối đến tệp lược đồ thực tế từ lược đồ tham chiếu của tôi (LƯU Ý: Nó cũng hoàn toàn không bắt buộc - xem ghi chú của tôi ở cuối câu trả lời này).

Để sử dụng các loại bên trong CommonTypes.xsd, đầu tiên tôi thêm các loại không gian tên chung trong việc kê khai sơ đồ chính của tôi:

<xs:schema targetNamespace="http://MyNamespace/MyTypes" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified" 
      xmlns:common="http://CommonTypesNamespace/CommonTypes"> 

này được nói rằng tôi muốn làm cho các loại từ schema chung tôi sẵn trong tôi lược đồ chính sử dụng tiền tố không gian tên "chung".

Sau đó, ví dụ, để tham khảo một "Địa chỉ" loại phổ biến:

<xs:element name="DeliveryAddress" type="common:AddressType" /> 

này nói rằng loại địa chỉ giao hàng của tôi thực sự là loại giống như AddressType định nghĩa trong lược đồ loại phổ biến.

Lưu ý: schemaLocation cũng có thể được sử dụng với đường dẫn của URI, tuyệt đối hoặc UNC hoặc hoàn toàn không phải vì nó là thuộc tính hoàn toàn tùy chọn. Nếu bạn không sử dụng schemaLocation, trình phân tích cú pháp của bạn sẽ rất có khả năng quét các thư mục cục bộ đang tìm kiếm một lược đồ có đúng không gian tên được xác định, nhưng điều này phụ thuộc vào việc thực thi.

+1

Trên thực tế, 'schemaLocation' không có gì khác ngoài gợi ý tùy chọn về vị trí của lược đồ với không gian tên đó. Bộ vi xử lý được tự do bỏ qua nó khi nó thấy phù hợp. – skaffman

+0

Vì vậy, nó dựa trên quy ước chứ không phải là định nghĩa nghiêm ngặt? Tôi đã nhìn thấy nó được thực hiện theo cách này nhiều lần trước đây, và tôi đã làm điều này. –

+0

Một số triển khai có thể chặt chẽ hơn các cài đặt khác, nhưng thông số lược đồ XML cho biết nó rất tùy chọn. – skaffman

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