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

为具有自定义xsi:type元素的XML创建XSD时获取命名空间错误

年良骏
2023-03-14

我正在尝试为小型XML创建XSD,它的默认名称空间为

<?xml version="1.0" encoding="UTF-8"?>
    <POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/">
        <object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
            <elt1>test1</elt1>
            <elt2>test2</elt2>
            <elt3>test3</elt3>
        </object>
        <SequenceNumber xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" xmlns="">3</SequenceNumber>
    </POSLog>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/" attributeFormDefault="unqualified" elementFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import schemaLocation="schema1.xsd" />
    <xs:element name="POSLog">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="object" />
                <xs:element ref="SequenceNumber" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="object">
        <xs:sequence>
            <xs:element name="elt1" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="A">
        <xs:complexContent>
            <xs:extension base="object">
                <xs:sequence>
                    <xs:element name="elt2" type="xs:string"/>
                    <xs:element name="elt3" type="xs:string"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="SequenceNumber" type="xs:unsignedByte" />
    <xs:element name="object" type="object" />
</xs:schema>

当我试图验证XSD我得到以下错误。这个错误的原因是

错误:元素{http://www.w3.org/2001/XMLSchema}模式:验证根没有匹配的全局声明。

我的要求是为上述示例XML生成有效的XML模式。


共有2个答案

丁正阳
2023-03-14

我找到了上述错误的原因。

在对象中。xsd我已经添加了elementFormDefault=“qualified”属性,并更改了元素对象类型。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import schemaLocation="schema1.xsd" />
    <xs:complexType name="A">
        <xs:sequence>
            <xs:element name="elt1" type="xs:string"/>
            <xs:element name="elt2" type="xs:string"/>
            <xs:element name="elt3" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="POSLog">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="object">          
                </xs:element>
                <xs:element ref="SequenceNumber" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
宰父桐
2023-03-14

要调整XSD以验证XML:

>

  • 注意POSLog对象"http://www.nrf-arts.org/IXRetail/namespace/"命名空间中,而序列号不在命名空间中。

    因此,对定义进行分组,使POSLogobject在一个XSD(object.XSD)中,而SequenceNumber在另一个XSD(schema1.XSD)中。

    相应地重新分发类型定义。

    下面是验证XML所需的XSD的一整套调整:

    <?xml version="1.0" encoding="UTF-8"?>
    <POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace/ object.xsd">
      <object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
        <elt1>test1</elt1>
        <elt2>test2</elt2>
        <elt3>test3</elt3>
      </object>
      <SequenceNumber xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" xmlns="">3</SequenceNumber>
    </POSLog>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/"
               targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/"
               attributeFormDefault="unqualified"
               elementFormDefault="qualified"
               xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:import schemaLocation="schema1.xsd"/>
      <xs:element name="POSLog">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="ns2:object" />
            <xs:element ref="SequenceNumber" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="object" type="ns2:object" />
      <xs:complexType name="object">
        <xs:sequence>
          <xs:element name="elt1" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="A">
        <xs:complexContent>
          <xs:extension base="ns2:object">
            <xs:sequence>
              <xs:element name="elt2" type="xs:string"/>
              <xs:element name="elt3" type="xs:string"/>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
    </xs:schema>
    
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" 
               elementFormDefault="qualified"
               xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="SequenceNumber" type="xs:unsignedByte" />
    </xs:schema>
    

  •  类似资料:
    • 我无法使用下面的XSD验证XML, XSD数据 我在用XML验证这个XSD时遇到以下错误, cvc复合型。2.4.答:发现以元素“standardHeader”开头的内容无效。应为“{standardHeader}”之一。 如何提供此标签:

    • 我有一个非常简单的XML 组织。xml。萨克斯。SAXParseException:s4s elt架构ns:元素'Config'的命名空间必须来自架构命名空间'http://www.w3.org/2001/XMLSchema'. XML到这里: XSD去这里:

    • 目标:在我的项目中,数据准备是由不同的团队在不同的级别完成的。我们用于数据准备的格式是XML。为了支持上述需求,我们准备了具有不同层(不同目标命名空间)的XSD,每个XSD层将继承先前的XSD层并对其进行扩展(感谢XSD重新定义)。 问题: 基础架构类型.xsd: infrastructure-GenericADM.xsd: 当我使用 Altova XMLSpy 验证 XSD 基础结构时,它给出了

    • 本文向大家介绍aurelia 基于命名约定创建自定义元素,包括了aurelia 基于命名约定创建自定义元素的使用技巧和注意事项,需要的朋友参考一下 示例 通过CustomElement在类名中简单地添加后缀,即可基于命名约定在Aurelia中创建一个基本的自定义元素。此后缀将由Aurelia自动删除。类名称的其余部分将被小写并使用连字符分隔,然后可用作元素名称。 示例: my-element.js

    • 我想在java中以编程方式生成xml字符串,其名称空间是自定义的,如下所示,所有数据必须以xml格式动态出现。我怎样才能达到这样的成就? 我经历过像https://howtodoinjava.com/jaxb/write-object-to-xml/这样的例子,但是当xml生成时,它的起点是 但我想要开始和结束标记

    • 本文向大家介绍aurelia 创建具有可绑定属性的自定义元素,包括了aurelia 创建具有可绑定属性的自定义元素的使用技巧和注意事项,需要的朋友参考一下 示例 创建具有可绑定属性的自定义元素非常简单。如果要创建一个接受一个或多个插件可以使用的值的元素,则需要使用@bindable装饰器和语法。 在下面,我们正在创建一个自定义元素,该元素接受一系列水果并显示它们。 示例: my-element.j