Xsd 如何限制属性上的父级?

Xsd 如何限制属性上的父级?,xsd,Xsd,看一看 现在在attribute.xsd中定义了一个性别属性。但据我所知,只要family.xsd有anyAttribute,我就可以使用这个属性 有没有可能根据父项的名称将性别属性限制为某个父项?我对XML技术的了解相当简单,因此对此要小心谨慎 您可以使用性别(男性|女性)来代替其他属性,因为它是语法正确的XML 但是,如果要检查XML是否有效且格式正确,则需要编写DTD或最好是模式文档,以检查允许在何处使用性别属性通常,只有在特别定义了复杂类型以允许所需属性时,才允许使用属性。另一方面,通常

看一看

现在在attribute.xsd中定义了一个性别属性。但据我所知,只要family.xsd有anyAttribute,我就可以使用这个属性


有没有可能根据父项的名称将性别属性限制为某个父项?

我对XML技术的了解相当简单,因此对此要小心谨慎

您可以使用性别(男性|女性)来代替其他属性,因为它是语法正确的XML


但是,如果要检查XML是否有效且格式正确,则需要编写DTD或最好是模式文档,以检查允许在何处使用性别属性

通常,只有在特别定义了复杂类型以允许所需属性时,才允许使用属性。另一方面,通常只有当您希望在这个复杂类型中允许任何属性(可能有名称空间限制)时才使用

我认为这个问题可以用两种不同的方式来解释
  • 有没有一种方法可以使用
    ,但实际上只允许某些类型的属性
  • 有没有一种方法可以使用
    ,但不允许使用某个属性
  • 事实上,我没有什么好的答案,我只有未经测试的黑客

    案件1 这可以通过使用
    上的
    名称空间
    属性来实现。
    名称空间
    的默认值是
    ##any
    ,它允许来自任何名称空间或没有名称空间的属性。而不是任何你可以使用的

  • ##other
    ,它允许任何名称空间属性,但不允许属于架构的目标名称空间的属性
  • 允许名称空间的URI的空白分隔列表。此列表还可以包含通配符
    ##targetNamespace
    (允许来自架构的目标命名空间的属性)和
    ##local
    (允许不带命名空间的属性)
  • 不允许只有没有名称空间的属性

    如果架构具有目标命名空间,则所有全局定义的属性都属于该目标命名空间。因此,w3schools的示例实际上似乎是不正确的,因为他们在具有目标名称空间的模式中全局定义了属性
    gender
    ,但使用它时没有名称空间前缀(默认名称空间不适用于属性)

    案件2
    这可以通过
    实现。不能包括带有
    use=“违禁”
    的属性。然而,我从未调查过当
    元素存在时是否允许使用这样的属性定义。在全局属性定义中不允许使用属性
    ,因此以这种方式不可能全局禁止使用属性。

    我使用
    解决了这个问题,它允许您重新定义类型和组。

    face palm,对不起,我浏览了W3C链接,很快意识到它不是XMl教程。