2013-10-08 14 views
5

Sau đây tài liệu xml và schema được luộc xuống từ một schema lớn hơn nhiều, trong đó có vấn đề xảy ra đầu tiên:Tại sao 'không gian tên rỗng' được mong đợi cho một phần tử xml được định nghĩa là 'có' một không gian tên trong lược đồ?

Các tài liệu xml:

<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd"> 
    <f2b:Bar>text</f2b:Bar> 
</f2b:Foo> 

Giản đồ:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar"> 
    <xs:complexType name="T_Foo"> 
     <xs:sequence> 
      <xs:element name="Bar" xmlns="f2b"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="Foo" type="f2b:T_Foo"/> 
</xs:schema> 

Khi tôi xác thực tài liệu đối với giản đồ, tôi nhận được thông báo lỗi trên số <f2b:Bar> -nội dung nói rằng <f2b:Bar> không được mong đợi. Để làm cho tài liệu hợp lệ, tôi phải đặt <Bar> -element một cách rõ ràng (!) Vào 'không gian tên rỗng': <Bar xmlns="">. Tôi không thấy lý do tại sao một phần tử null-namespaced nên được mong đợi. Lược đồ xác định một không gian tên cho tất cả các phần tử và cho các <Foo> -element các f2b -namespace thực sự là dự kiến ​​của validator. Nhưng ngay cả khi tôi đặt rõ ràng không gian tên trong định nghĩa kết nối <Bar> như tôi đã làm ở trên, trình xác thực vẫn mong đợi xmlns="" cho số Bar. Tôi đã thử một số biến thể của lược đồ và tài liệu để tìm câu trả lời mà không có may mắn - và tôi không thể đoán tại sao địa ngục trong trường hợp đặc biệt này là không gian tên rỗng được mong đợi.

Bất kỳ gợi ý đánh giá cao ... Ekke

Trả lời

3

Câu trả lời ngắn: thêm elementFormDefault="qualified" cho thẻ gốc xs:schema của giản đồ của bạn.

Câu trả lời dài hơn: theo mặc định, chỉ các khai báo phần tử "toàn cầu" cấp cao nhất có trên không gian tên đích của lược đồ. Khai báo phần tử "Local" bên trong một kiểu phức tạp không có không gian tên. Bạn có thể ghi đè điều này cho một phần tử cục bộ cụ thể bằng cách sử dụng thuộc tính form trên thẻ xs:element hoặc trên toàn cầu cho tất cả các phần tử sử dụng elementFormDefault trên xs:schema.

+0

Cảm ơn câu trả lời rõ ràng - bạn hoàn toàn đúng. ekke – ekke

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