việc sử dụng xsi: lượcLocation là gì?


131

Tôi thấy rằng chúng tôi có nhiều url là giá trị của thuộc tính này như vào mùa xuân:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

Tại sao nó cần thiết và nó được sử dụng để làm gì? Spring có đi đến url và xác nhận không? sự khác biệt giữa xmlns và xsi: lượcLocation là gì?

Câu trả lời:


87

Trình phân tích cú pháp Java XML mà mùa xuân sử dụng sẽ đọc các schemaLocationgiá trị và cố gắng tải chúng từ internet, để xác thực tệp XML. Ngược lại, Spring chặn các yêu cầu tải đó và phục vụ các phiên bản từ bên trong các tệp JAR của chính nó.

Nếu bạn bỏ qua schemaLocation, thì trình phân tích cú pháp XML sẽ không biết lấy lược đồ ở đâu để xác thực cấu hình.


Trình phân tích cú pháp XML sẽ không tìm kiếm đường dẫn lớp?
HDave

1
@skaffman, Điều đó có nghĩa là khi tôi chạy maven build của dự án dựa trên mùa xuân với cờ -o (ngoại tuyến), bản dựng sẽ thất bại mặc dù thực tế là tất cả các phụ thuộc đều có sẵn trong kho lưu trữ cục bộ của tôi?
aviad

@HDave Nhưng trình phân tích cú pháp XML sẽ tìm kiếm gì, lược đồ có thể có bất kỳ tên nào
Krzysztof Krasnoyń

Về mặt kỹ thuật, trước tiên, trình phân tích cú pháp XML sẽ cố gắng tải lược đồ từ internet, nếu không tìm thấy hoặc không có quyền truy cập internet, nó sẽ tìm kiếm tệp * .xsd cục bộ từ đường dẫn lớp, nếu không tìm thấy, nó sẽ bị bỏ qua.
Frank Zhang

Để biết thêm thông tin về lớp chặn mùa xuân, xem stackoverflow.com/a/10768972/32453
rogerdpack

68

An xmlnslà một định danh duy nhất trong tài liệu - nó không phải là một URI cho lược đồ:

Các không gian tên XML cung cấp một phương thức đơn giản để xác định tên thành phần và thuộc tính được sử dụng trong các tài liệu Ngôn ngữ đánh dấu mở rộng bằng cách liên kết chúng với các không gian tên được xác định bởi các tham chiếu URI.

xsi:schemaLocation được cho là đưa ra gợi ý về vị trí lược đồ thực tế:

có thể được sử dụng trong một tài liệu để cung cấp gợi ý về vị trí vật lý của các tài liệu lược đồ có thể được sử dụng để đánh giá.


22

Theo thông số kỹ thuật để định vị lược đồ

có thể có hoặc không có thể truy xuất lược đồ thông qua tên không gian tên ... Cộng đồng người dùng và / hoặc thỏa thuận người tiêu dùng / nhà cung cấp có thể thiết lập các tình huống trong đó [cố gắng truy xuất xsd từ url không gian tên] là một chiến lược mặc định hợp lý

(cảm ơn vì đã rõ ràng, spec!)

trong trường hợp tác giả tài liệu (người hoặc không) tạo tài liệu có lược đồ cụ thể và bảo đảm rằng một số hoặc tất cả tài liệu phù hợp với lược đồ đó, lược đồLocation và noNamespaceSchemaLocation [thuộc tính] được cung cấp.

Vì vậy, về cơ bản với việc chỉ định một không gian tên, "có thể" XML của bạn sẽ được xác nhận hợp lệ đối với một xsd tại vị trí đó (ngay cả khi nó thiếu một schemaLocationthuộc tính), tùy thuộc vào "cộng đồng" của bạn. Nếu bạn chỉ định một cụ thể schemaLocation, thì về cơ bản nó có nghĩa là tài liệu xml "nên" phù hợp với xsd đã nói, vì vậy "vui lòng xác thực nó" (khi tôi đọc nó). Tôi đoán là nếu bạn không làm một schemaLocationhoặc noNamespaceSchemaLocationthuộc tính thì nó hầu như "không được xác thực" trong hầu hết thời gian (dựa trên các câu trả lời khác, xuất hiện java thực hiện theo cách này).

Một nếp nhăn khác ở đây là thông thường, với xác thực xsd trong các thư viện java [ví dụ: tệp xml cấu hình mùa xuân], nếu các tệp XML của bạn chỉ định một schemaLocationurl xsd cụ thể trong một tệp XML, như xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"thông thường trong một trong các tệp phụ thuộc của bạn, nó sẽ chứa một bản sao của tệp xsd đó, trong phần tài nguyên của nó và spring có khả năng "ánh xạ" để xử lý tệp xsd đó như thể nó ánh xạ tới url http://somewhere/something.xsd(vì vậy bạn sẽ không bao giờ truy cập web và tải xuống tệp, nó chỉ tồn tại cục bộ). Xem thêm https://stackoverflow.com/a/41225329/32453 để biết thêm thông tin.


0

Nếu bạn đi vào bất kỳ vị trí nào trong số đó, thì bạn sẽ tìm thấy những gì được xác định trong lược đồ đó. Ví dụ, nó cho bạn biết kiểu dữ liệu của giá trị từ khóa phương thức ini là gì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.