2009-05-27 6 views
6

Xin chào Tôi đang cố gắng để có được tâm trí của tôi xung quanh XSD, XML và không gian tên nhưng tôi không thể có được những thứ để làm việc theo cách tôi muốn họ.XSD với nhập khẩu và không gian tên

Tôi có một XSD đó, vào lúc này, bắt đầu như thế này:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:import namespace="http://www.example.com" schemaLocation="Include.xsd" /> 

Như bạn có thể thấy, nó nhập khẩu một tập tin XSD, bắt đầu như thế này:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      targetNamespace="http://www.example.com" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 

Sau đó, tôi có một số tài liệu xml dựa trên lược đồ này:

<foobar> 
    <whatever>.... 

Về cơ bản tôi không quan tâm đến không gian tên là gì st muốn điều darn để làm việc. Trước đây tôi đã không sử dụng bất kỳ không gian tên nào nhưng có vẻ như tôi phải sử dụng chúng để nhập một XSD vào một vùng khác. Những gì tôi không muốn làm là phải cung cấp tiền tố cho tất cả các phần tử trong tài liệu xml của tôi.

Để đạt được điều này, tôi cần các kết hợp giá trị nào cho các thuộc tính khác nhau (targetNamespace, namespace, xmlns, elementFormDefault etc) trong tài liệu XSD và XML?

Hiện tại, mọi thành phần được xác định trong tài liệu XSD đã nhập yêu cầu phải có đủ tiêu chuẩn không gian tên trong XML.

+0

Có tài liệu của bạn thực sự bắt đầu với meaninging bạn có một yếu tố 'xml' quy định tại một trong các lược đồ, hoặc bạn có nghĩa là tài liệu bắt đầu với ? – Jherico

+0

Tôi có nghĩa là gốc đã được xml - Tôi đã cố định nó lên để tránh nhầm lẫn. – cbp

Trả lời

13

Nếu bạn không sử dụng không gian tên hoặc lược đồ của bạn chia sẻ không gian tên tương tự, bạn sẽ tốt hơn bằng cách sử dụng xs: bao gồm hơn xs: nhập khẩu. Giản đồ A có thể bao gồm lược đồ B nếu B hoặc có cùng một không gian tên như A hoặc không có không gian tên được khai báo (nếu trường hợp sau là trường hợp, B 'chấp nhận' không gian tên của includer khi được bao gồm). Vì vậy ... cái gì đó như:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:include schemaLocation="Include.xsd" /> 

<!-- ... --> 

</xs:schema> 
+0

ahhh đúng! cảm ơn – cbp

1

Tôi nghĩ bạn cần đặt elementFormDefault thành "không đủ tiêu chuẩn" nếu bạn muốn tránh các tiền tố trên các phần tử XML của mình. Phần còn lại là tốt, tôi nghĩ - không gian tên giống nhau giữa chủ của bạn và XSD đã nhập của bạn - điều đó là tốt. Bạn chỉ định xmlns = không có tiền tố - điều đó tốt. Bạn sẽ được tốt để đi.

Marc

+0

Cảm ơn, bạn nói đúng - tôi đã gần hơn tôi nghĩ. Tuy nhiên tôi thấy rằng khi tôi tạo tài liệu XML của mình, các phần tử được định nghĩa trong XSD được nhập khẩu yêu cầu không gian tên được chỉ định (mặc dù cả XSD đã nhập và XSD thực tế đều có phần tử elementFormDefault được đặt thành 'không đủ điều kiện'). – cbp