当前位置:  开发笔记 > Android > 正文

XSD - 如何描述一组无序的元素类型,其中第一个元素必须首先出现在序列中?

如何解决《XSD-如何描述一组无序的元素类型,其中第一个元素必须首先出现在序列中?》经验,为你挑选了2个好方法。

这是一个XML架构问题.

我知道xsd:all元素不能出现在序列中(必须是其类型的顶级元素).

也就是说,我不能使用以下内容:


  
    
    
      
      
    
  

我的问题是如何以任何顺序(无序集)声明上面的"ADD"和"DELETE"元素,但仍然确保元素"Name"将是第一个并始终显示.(想想我不仅有"ADD"和"DELETE"但大约有10个或更多无序元素设置的情况:ADD,DELETE,EDIT等......)

重要说明:ADD和DELETE可能仅出现在ONCE,但它们的顺序无关紧要:


  
   
   

但不是:


  
  
  
   

Yossi Dahan.. 17

如果我理解你的请求,你就是正确的,你唯一缺少的就是你选择的maxOccurs ="unbounded".

我创建了以下架构:



  
  

  
    
      
      
        
        
      
    
  

  
  
  

它运作良好


  
  
  
  
  
  
  

但不是


  
  
  
  
  
  


James Daily.. 5

很抱歉,您已经为这个问题苦苦苦干了7年了,但没有答案。

我将通过重新考虑您的假设来提供帮助。

通过将“名称”视为必须首先出现的数据,并要求它必须是Application的子级,然后通常说您不关心其同级项的顺序,您就使情况变得混乱为自己。如果Name遵循不同的规则并具有不同的目的,为什么将它命名为ADD和DELETE的同级兄弟?如果必须在任何其他数据结构中对此建模,则不会在“ ADD”和“ DELETE”旁边的事物列表中包括“ Name”。您会说两件事:应用程序具有名称,并且还具有命令列表,例如ADD和DELETE。

由于Name与ADD和DELETE相比是特殊的事情,因此应与其他标签分开建模。

因此,您可以将Name设置为Application的属性,并将Add和Delete保留为子元素,或者可以将Name保留为子元素,然后使用占位符/分组标签(例如Commands)将ADD和DELETE包围起来。Commands标记将是Name的唯一同级。

这是一个支持Name作为属性的模式,具有任意数量的任意顺序的命令。“名称为Attribute.xsd”:



    
    
            
                
                
                
                
            
            
    
    
    
      
     

XML示例:



    text
    text
    text
    text

这是一个带有嵌套在占位符标签中的命令的命令。“命令Grouping.xsd”:



    
    
        
            
            
        
    
    
        
            
            
            
            
        
    
    
    
    
    
    

XML示例:



    text
    
        text
        text
        text
        text
    

关于这两个方面的一个注意事项是,带有零命令的消息仍然是有效消息。也许没关系,但是如果有问题,那么验证可能属于应用程序层而不是XSD。



1> Yossi Dahan..:

如果我理解你的请求,你就是正确的,你唯一缺少的就是你选择的maxOccurs ="unbounded".

我创建了以下架构:



  
  

  
    
      
      
        
        
      
    
  

  
  
  

它运作良好


  
  
  
  
  
  
  

但不是


  
  
  
  
  
  



2> James Daily..:

很抱歉,您已经为这个问题苦苦苦干了7年了,但没有答案。

我将通过重新考虑您的假设来提供帮助。

通过将“名称”视为必须首先出现的数据,并要求它必须是Application的子级,然后通常说您不关心其同级项的顺序,您就使情况变得混乱为自己。如果Name遵循不同的规则并具有不同的目的,为什么将它命名为ADD和DELETE的同级兄弟?如果必须在任何其他数据结构中对此建模,则不会在“ ADD”和“ DELETE”旁边的事物列表中包括“ Name”。您会说两件事:应用程序具有名称,并且还具有命令列表,例如ADD和DELETE。

由于Name与ADD和DELETE相比是特殊的事情,因此应与其他标签分开建模。

因此,您可以将Name设置为Application的属性,并将Add和Delete保留为子元素,或者可以将Name保留为子元素,然后使用占位符/分组标签(例如Commands)将ADD和DELETE包围起来。Commands标记将是Name的唯一同级。

这是一个支持Name作为属性的模式,具有任意数量的任意顺序的命令。“名称为Attribute.xsd”:



    
    
            
                
                
                
                
            
            
    
    
    
      
     

XML示例:



    text
    text
    text
    text

这是一个带有嵌套在占位符标签中的命令的命令。“命令Grouping.xsd”:



    
    
        
            
            
        
    
    
        
            
            
            
            
        
    
    
    
    
    
    

XML示例:



    text
    
        text
        text
        text
        text
    

关于这两个方面的一个注意事项是,带有零命令的消息仍然是有效消息。也许没关系,但是如果有问题,那么验证可能属于应用程序层而不是XSD。

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有