当前位置: 首页 > 知识库问答 >
问题:

使xs和xmls:xsi属性成为XSD中必需的属性

夏宪
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="translator">
        ...
    </xs:element>
</xs:schema>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Translator.xsd"

如果我把它们放在XSD中,像这样

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="translator">
         <xs:attribute name="xmlns:xsi" type="xs:string" default="http://www.w3.org/2001/XMLSchema-instance"/>
         <xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string" default="Translator.xsd"/>
    </xs:element>
</xs:schema>

Xerces报告了以下问题

[Error] :678:114: s4s-att-invalid-value: Invalid attribute value for 'name' in element 'attribute'. Recorded reason: cvc-datatype-valid.1.2.1: 'xmlns:xsi' is not a valid value for 'NCName'.
[Error] :678:114: src-attribute.3.1: One of 'ref' or 'name' must be present in a local attribute declaration.
[Error] :679:117: s4s-att-invalid-value: Invalid attribute value for 'name' in element 'attribute'. Recorded reason: cvc-datatype-valid.1.2.1: 'xsi:noNamespaceSchemaLocation' is not a valid value for 'NCName'.
[Error] :679:117: src-attribute.3.1: One of 'ref' or 'name' must be present in a local attribute declaration.

共有1个答案

云新知
2023-03-14

首先警告:XML Schema规范禁止在XML Schema实例命名空间中声明属性,并显式阻止更改其行为的尝试。

话虽如此,您所得到的错误的原因是name属性只支持通过提供新元素的本地名称来定义目标命名空间中的新元素(在本例中不支持命名空间中的新元素)。

从技术上讲,您可以通过引用xsi:nonamespaceSchemaLocation属性来执行类似的操作,该属性已经在builtin XML架构实例命名空间中定义:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xs:element name="translator">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute ref="xsi:noNamespaceSchemaLocation" default="Translator.xsd"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
 类似资料:
  • 问题内容: 在我的Web应用程序中,我对表单字段使用了一些自定义验证。在同一个表单中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单。 通常,我使用Safari作为默认浏览器。现在Safari5退出了,突然我的“取消/重置”按钮不再起作用了。每次按下重置按钮时,表单中的第一个字段都会获得焦点。但是,这与我的自定义表单验证相同。在其他浏览器上尝试时,一切都很好。我必须是Safari 5

  • 我目前正在尝试使用能够处理多态性的jackson实现反序列化程序,也就是说,给定这两个类: 反序列化器应该能够从json字符串推断和实例化正确的子类。 我使用自定义解串器模块,即唯一属性多态态序列化器(从 https://gist.github.com/robinhowlett/ce45e575197060b8392d)。此模块的配置如下: 该模块向用户询问动物的每个子类的唯一属性。因此,当反序列

  • 这是我的。工作文件 作业失败,出现以下错误: 我用的是Azkaban 2.5和cdh5

  • 下面是一个XSD文件,我需要用它来验证这个xml。 所以先解释一下。我定义了一个可以包含多个事件元素(类型为“eventType”)的计划元素。此外,我还定义了替换元素事件(替换组)的元素课程、研讨会和实验室,以便: > 课程必须包含教授元素 研讨会必须只包含一个讲座元素 实验元素的讲座不应包含教室属性(禁止)。在其他任何情况下,教室都是必需的。 最后一个我一直有问题。基本上,为了解决这个问题,我

  • 问题内容: 我想分享我使用素数,f:viewParam和p:commandButton的经验,并提出一些问题。请看此页面: 支持bean具有不执行任何操作的“ myMethod()”方法。当您进入页面时,它需要“ id_file”参数并将其放在备用bean的idFile属性中。然后单击按钮,然后调用myMethod。然后再次单击,将得到一个模糊的验证错误,并且永远不会调用myMethod: 首先,

  • 我想用构造函数注入将一个bean列表注入到一个spring bean中。 但是BeanToInject的实现在其他模块中。这些模块可能被关闭。如果applicationcontext中没有BeanToInject的实现,则spring在start上抛出异常,而不是注入空列表。我能做什么?(对我来说,基于设置器和私有财产的自动取舍不是一种选择。)