首页 > 解决方案 > XML 元素位置无效。(SQL-XSD)

问题描述

我今天刚开始学习 XML。我试图创建一个“样本”XSD 并填充它,但是..我编造了我的数据,它看起来很好,但我无法使这个架构工作..

CREATE XML SCHEMA COLLECTION GenreTestSchema
AS
<?xml version = "1.0" encoding = "UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!--create group for GENRELIST-->
  <xsd:group name="GENRELISTGROUP">
    <xsd:element name="GENRELIST">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="GENRE" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="REFERENCE" minOccurs="0" maxOccurs="100" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
  </xsd:group>
</xsd:schema>

现在如果我删除这个元素

<xsd:element name="GENRELIST">

以及随之而来的所有代码(元素和复杂类型),那么架构工作正常。我不知道这里出了什么问题,为什么它不允许我创建这个元素?

错误日志

Element <element> is not valid at location '/*:schema[1]/*:group[1]/*:element[1]'.

它谈到了无效的位置,但我真的不知道为什么?

数据样本

<GENRELIST xmlns="http://myGenres">
    <GENRE GenreNo="1">
        <GENRE>Fiction</GENRE>
        <REFERENCE>Alien</REFERENCE>
    </GENRE>
    <GENRE GenreNo="2">
        <GENRE>Tragedy</GENRE>
        <REFERENCE>Titanic</REFERENCE>
    </GENRE>
</GENRELIST>

标签: sqlsql-serverxmltsqlxsd

解决方案


我不知道您为什么要尝试创建 xs:group (“模型组”)。模型组是可重用的模式声明块,可以在多个地方使用,当您有多个具有相似结构的元素时非常方便。有一个只有一个引用的组有时可能有意义,但没有引用它的组就没有意义。

现在有一个额外的(和相关的)问题)。通常,当您开始验证实例文档时,验证器会查找名称与实例的根元素匹配的全局元素声明。但是您的架构中没有全局元素声明;您的声明GENRELIST不是全局的,因为它在一个组中。


推荐阅读