Ответ 1
Существуют два разных способа составления документов XML-схемы: <xs:import>
и <xs:include>
. xs: include предназначен для использования, когда пространство имен содержащего документа совпадает с пространством имен, на которое ссылается, поэтому оно не совсем то, что вы ищете. xs: import лучше для вашей ситуации, когда вам нужно ссылаться на все (или подмножество) элементов в ссылочной схеме и они находятся в другом целевом пространстве имен. Здесь возникает вопрос о различиях: В чем разница между xsd: include и xsd: import?.
В любом случае, вернемся к этому конкретному вопросу. То, что вы, вероятно, хотите, это что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns="http://example.com/namespace/for/ElementB"
targetNamespace="http://example.com/namespace/for/ElementB"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ea="http://example.com/namespace/for/ElementA">
<xs:import namespace="http://example.com/namespace/for/ElementA" schemaLocation="A.xsd" />
<xs:element name="ElementB">
<xs:complexType>
<xs:sequence>
<xs:element name="foo" type="xs:string" />
<xs:element name="bar" type="xs:string" />
<!-- This introduces a element named ElementA that uses the ComplexType ea:ElementA defined in A.xsd -->
<xs:element name="ElementA" type="ea:ElementA" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Хотя вам понадобится A.xsd для создания сложного типа для ElementA, который вы можете использовать в B.xsd, как показано.
В этой статье есть несколько хороших сведений/примеров и включает обсуждение некоторых из различных стратегий слияния: http://www.xfront.com/ZeroOneOrManyNamespaces.html