2012-01-18 32 views
7

này được giản đồ XSD hiện tại của tôi trong foo.xsd, mà tuyên bố chỉ loại:cách nhập các loại XSD vào lược đồ gốc?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" 
    targetNamespace="foo"> 
    <xs:complexType name="alpha"> 
    <!-- skipped --> 
    </xs:complexType> 
</xs:schema> 

Đây là một lược đồ, khai báo các yếu tố:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" 
    targetNamespace="foo"> 
    <xs:import schemaLocation="foo.xsd" namespace="foo" /> 
    <xs:element name="RootElement" type="alpha"/> 
</xs:schema> 

Đây là những gì tôi nhận được từ SAX trình phân tích cú pháp trong Java:

"The namespace attribute 'foo' of an <import> element information 
item must not be the same as the targetNamespace of the schema it exists in." 

Tôi đang làm gì sai?

Trả lời

14

Khi thuộc tính targetNamespace (tns) của các XSD liên quan được chỉ định và giống nhau, chỉ xsd: include được cho phép (thuộc tính targetNamespace không thể có chuỗi rỗng làm giá trị của nó).

Tuy nhiên, người ta có thể bao gồm một lược đồ (s1) mà không có một tns từ một lược đồ (s2) có một tns; hiệu ứng ròng là các thành phần s1 giả định không gian tên của lược đồ s2. Cách sử dụng này thường được gọi là thành phần chameleonic.

Một tham chiếu về SO mô tả sự khác biệt giữa hai, là here.

+0

Cảm ơn rất nhiều, đây chính xác là những gì tôi đang tìm kiếm! – yegor256

+0

Có phải "tns" giống với "targetNamespace" không? – Line

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