【问题标题】:xml problem with <attribute ref="..."><attribute ref="..."> 的 xml 问题
【发布时间】:2010-08-13 12:30:46
【问题描述】:

我有一个 xml 架构

<xs:complexType>
...
<xs:attribute ref="unaryOperator"></xs:attribute>
</xs:complexType>


<xs:attribute name="unaryOperator">

我尝试在我的 xml 文件中使用它 像这样

  <inv_constraint unaryOperator="not">

编辑器给我这个错误:

描述资源路径位置类型 [Xerces] cvc-complex-type.3.2.2:属性“unaryOperator”不允许出现在元素“inv_constraint”中。 @see:http://www.w3.org/TR/xmlschema-1/#cvc-complex-typeabc.xml /prova 第 28 行 XML 问题

编辑建议我这样做

<inv_constraint xmlns:ns1="http://abc/abcd" ns1:unaryOperator="not" >

如果我不使用 xml 架构中的 ref 并且只是复制粘贴属性而不是引用它,那么我的 xml 文件可以工作,

所以我的问题是如何在没有那个奇怪标签的情况下使我的 xml 有效并将 ref 保留在 xml 架构中?

【问题讨论】:

    标签: xml reference xsd


    【解决方案1】:

    我认为这里没有任何问题。以下对我来说很好:

    schema.xsd:

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="ct">
        <xs:attribute ref="unaryOperator"/>
    </xs:complexType>
    
    <xs:attribute name="unaryOperator"/>
    
    <xs:element name="inv_constraint" type="ct"/>
    
    </xs:schema>
    

    文件.xml:

    <?xml version="1.0"?>
    <inv_constraint unaryOperator="non" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd"></inv_constraint>
    

    我已经在 Xerces、Saxon、XSV 和其他一些验证器上对其进行了测试。

    所以,如果你还有这个问题:

    1. 提供完整示例 - 简化的架构文件和 XML 文件,我们可以在其上重现此问题。
    2. 您使用什么编辑器?

    【讨论】:

    • 是的,我同意它有效,我想我没有很好地解释自己,我想要你的 schema.xsd 和这个 file.xml 不是这个:w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd"> 为什么我必须放置这些奇怪的标签(xmlns:xsi ="w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd") 使 file.xml 工作?谢谢
    • 我认为,如果没有这个属性,它将无法自动验证它。虽然您可以在 oXygen 编辑器中使用外部验证或验证场景(我没有要测试的插件)。如果尝试验证没有模式声明属性的文档,oXygen 会说:“没有与文档关联的模式或 DTD。您可以使用关联模式操作或在选项中配置首选项/文档类型关联列表来创建关联,或通过创建验证方案”
    • 顺便说一句,你为什么不喜欢架构位置属性?如果您想通过不同的工具自动执行验证 - 常见且最好的方法是使用 schemaLocation ...
    • 谢谢你的时间,我在这里得到了我的解决方案stackoverflow.com/questions/3469997/xml-schema-attribute-ref
    • 原因,为什么问题中的示例不起作用但此答案中的类似代码确实起作用,位于 targetNamespace 属性后面。如果模式为某个命名空间定义了一种语言,即它有一个目标命名空间,那么所有全局定义都在这个命名空间中。如果目标命名空间尚未定义,则命名空间为 null,并且全局定义的属性(或元素)不需要在架构实现文档中具有命名空间前缀。
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多