我有一个在公共模式中定义的元素,将被其他几个模式使用。如何引用导入常用元素的模式中的所述元素?
让我提供一些更多细节......这是常见的架构:
<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"/>
...但这会导致其他问题,而且它更像是一种解决方法......
我真正想知道的是:我可以将一个全局元素从一个模式导入另一个吗?
答案 0 :(得分:2)
导入足以导入元素。那么它只取决于你想用它做什么。如果要使其成为复杂类型的内容模型的一部分,则包括引用它的元素粒子,例如<element ref="mon:heartBeatresp"/>
,或者如果要向其替换组添加元素,请使用{{ 1}}。