看看this example。
现在在attribute.xsd中定义了一个性别属性。但据我所知,只要family.xsd具有anyAttribute,我就可以使用此属性。
是否可以根据父母的姓名将性别属性限制为某个父级?
答案 0 :(得分:0)
通常,只有在特别定义复杂类型以允许所需属性时才允许使用属性。另一方面,只有在您希望在此复杂类型中允许任何属性(可能具有名称空间限制)时,才使用<xs:anyAttribute>
。
<xs:anyAttribute>
但实际上只允许某种属性<xs:anyAttribute>
但不允许某个属性实际上我没有任何好的答案,我只有未经测试的黑客。
这可以使用namespace
上的<xs:anyAttribute>
属性来实现。 namespace
的默认值为##any
,它允许来自任何命名空间或没有命名空间的属性。而不是##任何你可以使用
##other
,它允许任何命名空间属性,但不允许属于模式的目标命名空间的属性
或 ##targetNamespace
(允许来自架构的目标命名空间的属性)和##local
(允许没有命名空间的属性)似乎不允许仅使用没有命名空间的属性。
如果架构具有目标命名空间,则所有全局定义的属性都属于该目标命名空间。所以w3schools的例子实际上似乎是不正确的,因为他们在具有目标命名空间的模式中全局定义了属性gender
,但他们在没有命名空间前缀的情况下使用它(默认命名空间不适用于属性)。 / p>
使用<xs:attribute name="gender" use="prohibited"/>
可以 。无法包含use="prohibited"
的属性。但是我从未调查过,当<xs:anyAttribute>
元素存在时,允许使用这样的属性定义。全局属性定义不允许使用属性use
,因此不可能以这种方式全局禁止使用属性。
答案 1 :(得分:0)
我使用<xs:redefine>
解决了这个问题,它允许您重新定义类型和组。
答案 2 :(得分:-1)
我对XML技术的了解非常简短,所以请耐心等待。
您可以使用性别(男性|女性)代替其他属性,因为它在语法上是正确的XML。
但是,如果您正在检查XML是否有效且格式正确,那么您需要编写DTD或最好是架构文档,以检查允许使用性别属性的位置