2012-10-02 117 views
0

比方说,我有一个XML这样的事情:是否可以通过额外的XSD为元素定义XML属性?

<root xmlns="default" xmlns:add="additional"> 
    <element foo="fromDefault" /> 
    <add:element foo="fromDefault" add:bar="fromAdditional" /> 
</root> 

我想这样做是为了合并两个element定义,以避免重复,像这样:

<root xmlns="default" xmlns:add="additional"> 
    <element foo="fromDefault" add:bar="fromAdditional" /> 
</root> 

但我米甚至不知道这是否可能。

我有一种感觉,因为我们使用了一些类似的符号根元素,比如它可能是可行的:

<root xmlns:xsi="..." 
     xsi:schemaLocation="..."> 

遗憾的是我没能找到任何文档/参考/教程/有关此问题的任何东西,有人可以帮助我澄清,如果我想要做什么是可能的(或不),并与我分享一些链接?

在此先感谢!

+0

不知道你的问题是什么。您的第二个XML示例是格式完美的XML。您的问题是为这个XML编写一个模式,还是将第一个XML示例转换为第二个,或者是什么?不确定你认为“额外的XSD”会带给派对。 –

+0

我对整个概念有点不确定,但是,我想为此编写架构(* default *和* additional *)。我应该在两个模式定义中创建相同的xsd元素吗? – rlegendi

+1

在我能回答之前,我需要更多地了解你想要达到的目标。 –

回答

1

我认为你正在寻找的东西是这样的:

additional.xsd

<xs:schema 
    targetNamespace="additional" 
    elementFormDefault="qualified" 
    xmlns="additional" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:attribute name="bar" type="xs:string"/> 

</xs:schema> 

default.xsd

<xs:schema 
    targetNamespace="default" 
    elementFormDefault="qualified" 
    xmlns="default" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:add="additional"> 

    <xs:import namespace="additional" schemaLocation="additional.xsd"/> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="element" minOccurs="1" maxOccurs="1"> 
      <xs:complexType> 
      <xs:attribute name="foo" type="xs:string"/> 
      <xs:attribute ref="add:bar"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

的第一个模式只定义了“额外的东西(在示例中只是一个属性),第二个模式导入它定义了其他所有内容,在需要的地方引用附加内容。

+0

看起来很酷,让我试试吧! – rlegendi

相关问题