以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  菜鸟发问:schema里有两个element的name相同,可以吗?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=32509)


--  作者:yihui
--  发布时间:5/16/2006 5:59:00 PM

--  菜鸟发问:schema里有两个element的name相同,可以吗?
刚接触xml不久,最近要用到本行业内的一个报文标准(.xsd),其中有部分类似这样的代码:
  <xs:element name="A">
       <xs:complexType>
          <xs:sequence>
               <xs:element name="a1" type="xs:string">
               <xs:element name="a2" maxOccurs="4">
                    <xs:complexType>
                       <xs:sequence>
                             <xs:element ref="b1">
                             <xs:element name="b2" type="xs:string">
                       </xs:sequence>
                    <xs:complexType>
               </xs:element>
          </xs:sequence>
       <xs:complexType>
   </xs:element>
   <!--省略b1的说明代码-->
   <xs:element name="a2">
        <xs:complexType>
                       <xs:sequence>
                             <xs:element ref="b1">
                             <xs:element name="b2" type="xs:string">
                             <xs:element name="b3" type="xs:string">
                             <xs:element name="b4" type="xs:string">
                       </xs:sequence>
                    <xs:complexType>
   </xs:element>

  以上代码中,出现了两个name为"a2"的element,可以吗?
  其中第一个是作为A的子元素出现的,难道element也具有作用域?


--  作者:gemingke
--  发布时间:5/16/2006 6:41:00 PM

--  
用xmlspy检验时通过,可能可以。



--  作者:yihui
--  发布时间:5/17/2006 8:15:00 AM

--  
还是有疑问,在xml文件里,"a2"的格式到底该用哪个呢?
--  作者:gemingke
--  发布时间:5/17/2006 11:46:00 AM

--  
格式?请详细点
--  作者:yihui
--  发布时间:5/17/2006 4:25:00 PM

--  
例如,在xml文件里,实例化元素"A"时,当实例化、到它的子元素a2式,它(a2)的格式应该符合xsd里的哪个"a2"的格式呢?第一个(b1,b2)还是第二个(b1,b2,b3,b4)呢?为什么?

那个格式是水运行业的一个报文标准,没看过其相应的xml文件,所以对两个同名的element比较奇怪,请高手指教。


--  作者:98900969r
--  发布时间:5/17/2006 9:40:00 PM

--  
schema里元素定义是分局部的和全局的两种。一个元素定义,如果它是schema中schema元素的(直接)子元素,则为全局定义。否则,为局部定义。

所谓全局元素定义,并不是指这个被定义的元素将是实例文档中的根元素或者根元素的(直接)子元素,而是指该(元素)定义具有全局性,可以在整个schema中引用。凡引用之处,该元素的结构则如所引用的全局定义中规定的结构。明白了全局元素定义,就不难明白局部元素定义。可想而知,局部元素定义是一次性的,仅在“此处“有效的,在别处不能引用的。

那么很明显,不同的全局元素定义是不能定义同名的元素的,而不同地方的局部元素定义是可以定义同名(但不同地方,即不同路径)的元素的。此外,局部元素定义 是可以 定义 与 全局元素定义所定义的元素 同名的元素 的。这不会导致混淆,因为全局元素定义是将被在某(局部)处引用,而不是在该处被定义的。

你在5楼问的问题,根据你在1楼给的schema可知,A中的那个a2元素的结构应该为schema中A元素定义中a2元素定义所定义的结构,即(b1, b2),而不是另外那个a2定义所定义的结构,即(b1, b2, b3, b4)。


[此贴子已经被作者于2006-5-17 23:44:36编辑过]

--  作者:yihui
--  发布时间:5/18/2006 8:30:00 AM

--  
明白了,谢谢98900969r,gemingke!
--  作者:gemingke
--  发布时间:5/18/2006 12:40:00 PM

--  
俺就是一凑数的~~~~呵呵
--  作者:idzzn
--  发布时间:11/17/2006 9:54:00 AM

--  
补充一下:
如果一个路径中引用一个全局元素,那么在同一个路径下就不能使用与这个全局元素同名的局部元素
不知道说得对不对?
--  作者:zldou
--  发布时间:11/24/2006 6:05:00 PM

--  
6楼的好牛啊,向你学习
--  作者:tianyazi
--  发布时间:6/1/2007 11:10:00 AM

--  
俺是新手:

想请问大侠:

<xs:element name="A1">
  <xs:complexType>
   <xs:attribute name="cd" use="optional">
    <xs:simpleType>
     <xs:restriction base="xs:string"/>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
</xs:element>

中的<simpleType>
所定义的简单类型,是给谁定义的?


--  作者:ohaiyo
--  发布时间:6/29/2007 1:27:00 AM

--  
以下是引用idzzn在2006-11-17 9:54:00的发言:
补充一下:
如果一个路径中引用一个全局元素,那么在同一个路径下就不能使用与这个全局元素同名的局部元素
不知道说得对不对?

试一下, 在同一路径下不能出现同名的局部元素和全局元素


--  作者:c123123
--  发布时间:6/21/2010 11:43:00 AM

--  
最好使用不同的命名空间
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
125.000ms