2012-01-14 28 views
13
<?xml version="1.0" encoding="UTF-8"?> 

<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" 
     xmlns:context="http://www.springframework.org/schema/context" 

     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-2.1.xsd"> 

    <context:component-scan 
     base-package="com.springinaction.chapter01.knight" /> 

</beans> 

Ví dụ trên cho thấy ví dụ về tệp XML có nhiều không gian tên. Mục đích của các không gian tên này là gì và quan trọng nhất là tại sao chúng hoạt động ngay cả khi không có kết nối Internet?Vùng tên XML hoạt động như thế nào

Tôi nghĩ bit thứ hai bắt đầu bằng xsi:schemaLocation chứa các tệp lược đồ XML được sử dụng để xác thực cấu trúc của tài liệu XML. Làm thế nào đến những vẫn còn làm việc nếu tôi chạy các ứng dụng sử dụng tập tin cấu hình này trên một máy mà không phải là trên một mạng? Các URL có cách nào đó bí danh với các tệp JAR không?

Trả lời

14

Giả sử chúng tôi có tài liệu XML này.

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
     <body> 
     Your text here 
     </body> 
     <body> 
     <height>182 cm</height> 
     <weight>83 kg</weight> 
     </body> 
</html> 

Nó bao gồm HTML có thẻ nội dung có ý nghĩa ngữ nghĩa cho trình kết xuất HTML. Nó cũng có một thẻ body khác mang thông tin về một người cụ thể. Một không gian tên định nghĩa phạm vi ngữ nghĩa cho thẻ này. Không có vùng tên (như trong ví dụ được cung cấp), một trình phân tích cú pháp không thể phân biệt được sự khác biệt vì chúng giống nhau về cú pháp.

Dưới đây là phiên bản ngữ nghĩa chính xác của cùng một tài liệu:

<?xml version="1.0" encoding="UTF-8"?> 
<html:html xmlns:html="http://www.w3.org/TR/xhtml1/"> 
    <html:body> 
    Your text here 
    </html:body> 
    <human:body xmlns:html="http://www.example.com/human/"> 
    <human:height>182 cm</human:height> 
    <human:weight>83 kg</human:weight> 
    </human:body> 
</html:html> 

Như vậy nhờ vào không gian tên chúng tôi không có lo lắng về mâu thuẫn thẻ với ý nghĩa khác nhau.

Bản thân URI không gian tên không bao giờ thực sự được giải quyết và tùy ý (do đó bạn có thể sử dụng chúng ngoại tuyến).

+1

lý do tại sao chúng tôi chỉ nên sử dụng url tại sao không sử dụng một số từ duy nhất để tách thẻ này trong không gian tên. Cảm ơn bạn – Raghavendra

+0

Một số ngôn ngữ (như WPF và xaml) sử dụng các không gian tên như sử dụng các câu lệnh. Khi điều này xảy ra, url quan trọng. –

+0

Tôi không hiểu. Xmlns được định nghĩa cho con người ở đâu? ??? Không có ý nghĩa với tôi. – Mitch

4

Không gian tên XML là thành phần của tên của phần tử, bạn có thể liên kết với tiền tố khi viết xmlns:<prefix>="<namespace>". Điều đó giúp tránh đặt tên xung đột giữa các lược đồ XML khác nhau, để bạn có thể kết hợp các phần tử từ hai lược đồ xảy ra có cùng tên. Ví dụ: bạn có thể có hai lược đồ có cả hai thành phần link có ý nghĩa khác nhau và tiền tố không gian tên cho phép bạn phân biệt chúng bằng cách viết foo:link hoặc bar:link. Các không gian tên thường ở dạng URL, nhưng trình phân tích cú pháp chỉ coi nó là một chuỗi, nó không cố lấy bất cứ thứ gì từ URL đó.

Bạn chính xác về phần thứ hai, phần tử XSI:SchemaLocation. Xem this answer vì lý do tại sao nó vẫn có thể xác thực giản đồ mà không cần kết nối mạng.

+0

Không gian tên XML là * không * tiền tố và mô tả nó để chỉ có thể gây nhầm lẫn. Không gian tên là chuỗi thường trông giống như một URL. Tiền tố * có thể * được sử dụng để ** liên kết ** phần tử với không gian tên của nó. – Alohci

+0

@Alohci Cảm ơn bạn đã chỉ ra điều đó, tôi không ngụ ý rằng tiền tố là không gian tên. Tôi đã chỉnh sửa câu trả lời của mình để phân biệt hai câu trả lời. – Tony

9

Cố gắng bỏ qua thực tế là nhiều tên không gian tên trông giống như URL mà bạn có thể nhập vào trình duyệt của mình. Chúng chỉ là các chuỗi ký tự ngẫu nhiên, chúng không phải là địa chỉ của các tài nguyên trên web. Lý do mọi người chấp nhận quy ước này là nó cho thấy ai "sở hữu" tên - rõ ràng hơn là những gì http://www.w3.org/2001/XMLSchema đề cập đến hơn là họ đã chọn "xsd1.0" làm tên không gian tên và ít có khả năng xung đột vô tình với tên được chọn bởi một người nào khác. Một số người cũng thích thực tế là bạn có thể đặt tài liệu ở vị trí thích hợp, nhưng không có phần mềm XML nào sẽ tự động tìm tài liệu.

+0

cảm ơn bạn. tôi có một nghi ngờ khi tôi sử dụng đậu namepace trong java nếu tôi bỏ lỡ thẻ lớp đậu, ecllipse sẽ hiển thị một lỗi như bạn bị mất đó. Không gian tên đó hoạt động như thế nào mà không giải quyết. tha thứ cho tôi tiếng Anh của tôi không tốt. – Raghavendra

0

Không gian tên nói chung là tránh xung đột giữa các thẻ, nhưng đằng sau khung cảnh đó là hướng dẫn xử lý cho trình phân tích cú pháp đối với một số lược đồ. Trong trình duyệt, bạn có ví dụ khác nhau loại tài liệu, Xhtml nghiêm ngặt và như vậy, trình duyệt có những lược đồ một nơi nào đó được lưu trữ và phân tích cú pháp đề cập đến những lược đồ để xác nhận cấu trúc.

Vào mùa xuân khi bạn bật một lược đồ cụ thể, nó cần một tham chiếu trong đó lược đồ đó tồn tại, điều đó không có nghĩa là lược đồ URI không có ý nghĩa. Các tệp .jar liên quan sẽ cần thiết trong đường dẫn lớp, do đó trình phân tích cú pháp đề cập đến nó. org.springframework.context-4.1.jar. Nếu bạn nhìn vào tệp jar này, bạn sẽ tìm thấy trong gói org.springframework.context.config tệp spring-context-2.5.xsd hiện tại. Bạn xác định: xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

Các xmlns cung cấp cho bạn thông qua trình soạn thảo để sử dụng phương tiện cấu hình sẵn để viết ví dụ <context tag đến từ xmlns:context, và cho phép TAG xác nhận như:

<context:annotation-config> 

Nội dung nào trong TURN kích hoạt các chú thích khác nhau được phát hiện trong các lớp bean: @Required @Autowired, @PostConstruct, @P reDestroy và @Resource và thích.

Vì vậy, trong thực tế, trình phân tích cú pháp sẽ tìm thấy ý nghĩa trong khi phân tích cú pháp Đậu.

Giản đồ là rất cần thiết và ít nhất là phải được tải xuống mà IDE hoặc ứng dụng của bạn sẽ sử dụng để xác thực, nếu không nó sẽ tạo ngoại lệ xác thực. Nếu nó có sẵn cục bộ trong các lọ đó thì nó sẽ không tìm tải xuống.

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