XML模式:如何从另一个模式导入全局元素?

时间:2013-06-17 13:59:05

标签: xml xsd


我有一个在公共模式中定义的元素,将被其他几个模式使用。如何引用导入常用元素的模式中的所述元素? 让我提供一些更多细节......这是常见的架构:

<xs:schema 
    xmlns="http://schemas.com/ns/2013/06/research/monitoring" 
    targetNamespace="http://schemas.com/ns/2013/06/research/monitoring" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"
>
<xs:complexType name="SQLSettings">
  <xs:sequence>
    <xs:element name="MasterSqlServerName" type="xs:string"/>
    <xs:element name="MasterSqlServerNameRO" type="xs:string"/>
    <xs:element name="MasterDatabaseName" type="xs:string"/>
    <xs:element name="UserID" type="xs:string"/>
    <xs:element name="Password" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="heartbeatResp">
  <xs:sequence>     
    <xs:element name="SQLSettings" type="SQLSettings"/>         
    <xs:element name="ComputerName" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="heartbeatResp" type="heartbeatResp"/>

</xs:schema>

...这将是一个导入常见模式的模式:

<xs:schema xmlns="http://schemas.com/ns/2005/10/userinfoupdate" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://schemas.com/ns/2005/10/userinfoupdate" elementFormDefault="qualified" 
xmlns:mon="http://schemas.com/ns/2013/06/research/monitoring"
>

<xs:import namespace="http://schemas.com/ns/2013/06/research/monitoring" schemaLocation="common/schemas/research_monitoring.xsd" />

... declare here the heartbeatResp element of the common schema ...

</xs:schema>

有没有办法做到这一点?我试图制作<xs:element ref="mon:heartbeatResp"/>,但后来我发现全局元素声明不能包含引用 我知道我也可以将元素声明移动到我的特定模式中,并且只引用常见模式中的complexType - 比如<xs:element name="heartbeatResp" type="mon:heartbeatResp"/> ...但这会导致其他问题,而且它更像是一种解决方法......
我真正想知道的是:我可以将一个全局元素从一个模式导入另一个吗?

1 个答案:

答案 0 :(得分:2)

导入足以导入元素。那么它只取决于你想用它做什么。如果要使其成为复杂类型的内容模型的一部分,则包括引用它的元素粒子,例如<element ref="mon:heartBeatresp"/>,或者如果要向其替换组添加元素,请使用{{ 1}}。