elementFormDefault在XSD中的作用是什么?

8 浏览
0 Comments

elementFormDefault在XSD中的作用是什么?

elementFormDefault 是什么作用,应该在什么情况下使用?

我找到了一些关于elementFormDefault值的定义:

qualified - 元素和属性位于模式的targetNamespace中

unqualified - 元素和属性没有命名空间

从这个定义中,我认为如果一个模式被设置为qualified,为什么在类型前必须加上命名空间的前缀呢?另外,什么情况下你会设置为unqualified?我试过谷歌搜索,但只找到了一些非常难理解的W3C页面。

这是我现在正在处理的文件,为什么当我将targetNamespace声明为与xmlns:target相同的时候,我需要将类型声明为target:TypeAssignments呢?



  
    
      
        
      
    
  
  
    
      
    
  
  
    
      
      
      
    
    
  
  
    
      
      
    
  
  
    
      
      
      
    
  

0
0 Comments

elementFormDefault在XSD中的作用是确定在XSD中声明的本地元素的命名空间。如果不添加elementFormDefault="qualified"到xsd:schema,那么默认的unqualified值意味着本地声明的元素没有命名空间。

这个问题的出现原因是,XSD中的elementFormDefault属性默认为unqualified,这意味着本地声明的元素没有命名空间。这是XSD创建者的一个设计错误,标准做法是始终使用elementFormDefault="qualified",以便将元素放置在目标命名空间中。

解决方法有两种:

1. 绝大多数情况下,将elementFormDefault="qualified"添加到xsd:schema元素中。这意味着有效的XML必须将在XSD中本地声明的元素放置在目标命名空间中;否则,有效的XML必须将本地声明的元素放置在无命名空间中。

2. 在少数情况下,可以更改XML以符合XSD要求,即将assignment放置在无命名空间中。例如,可以向assignment元素添加xmlns=""来实现。

这篇文章详细解释了elementFormDefault在XSD中的作用,以及出现的原因和解决方法,并且提供了一个简单的例子和代码来说明问题。

0
0 Comments

当在XSD中使用complexType定义元素时,可以使用elementFormDefault属性来指定元素的命名空间限定方式。如果elementFormDefault的值为"unqualified",则元素可以在实例中不指定命名空间;如果elementFormDefault的值为"qualified",则元素必须在实例中指定命名空间。

在上述示例中,当elementFormDefault的值为"unqualified"时,作者的name属性可以在实例中不指定命名空间。而当elementFormDefault的值为"qualified"时,实例中的本地元素必须指定命名空间。

要解决这个问题,可以通过在XSD中将elementFormDefault属性的值更改为"qualified",以确保实例中的本地元素必须指定命名空间。

总结一下,elementFormDefault属性的作用是指定元素的命名空间限定方式。根据elementFormDefault的不同取值,实例中的元素是否需要指定命名空间也会有所不同。

0
0 Comments

`elementFormDefault`在XSD中的作用是确定符合模式的XML文档中元素的命名空间,而与模式中类型的命名空间无关。

根据规范,`elementFormDefault`属性的实际值可以是"qualified"或者"unqualified"。如果`elementFormDefault`的实际值是"qualified",或者在模式中明确声明元素的`form`属性为"qualified",那么模式中声明的元素只能在指定的命名空间中,该命名空间由模式中的`targetNamespace`属性确定。

举个例子,如果`elementFormDefault`是"unqualified",那么下面的元素声明:



会期望"name"元素在指定的命名空间中,而"page"元素在null命名空间中。

为了避免在每个元素声明中都加上`form="qualified"`,可以在模式中使用`elementFormDefault="qualified"`,这样指定的命名空间会应用于每个元素,除非在元素声明中明确指定`form="unqualified"`。

需要注意的是,本地定义的元素仍然位于指定的命名空间中,而不会位于null命名空间中。`elementFormDefault`只是一个开关,指定是否需要在实例中为它们添加命名空间限定符。

关于规范的解释有误导性,如果本地元素声明没有指定`form=qualified`,那么元素声明模式组件的`{target namespace}`属性是"absent",这意味着元素实例的命名空间URI属性也必须是"absent"。这可能会更加混淆人们的理解。

对于在示例中,"page"是否位于null命名空间中的问题,规范并没有直接说明,而是通过使用更加谨慎的术语来解释。如果`elementFormDefault = unqualified`,这是否意味着将本地定义的元素放在null命名空间中?规范为何不直接说明这一点?以及为什么具有`targetNamespace`的模式可以验证不在该命名空间中的元素呢?

此外,如果两个不同的XML词汇表都在null或无命名空间中,如何区分未限定的"page"元素与文档中出现的其他XML词汇表?

规范之所以没有"直接说明",是因为您描述的是非正式的。使用"将元素放在null命名空间中"这样的表述不是XSD规范中的术语,规范更喜欢使用更加精确的术语,虽然这样阅读起来可能更困难,但最终更加准确。

最后一个评论所回答的内容是正确的。

对于您的理解困难,我很抱歉。希望对您有所帮助。

0