【问题标题】:About XSD Element is invalid ( XML Schema)关于 XSD 元素无效(XML Schema)
【发布时间】:2012-11-14 21:21:09
【问题描述】:

我有一个关于 XSD 格式的问题。
例如,我有一个 XML 文档

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:media="http://search.yahoo.com/mrss/">
  <entry>
    <title>Examples</title>
    <id>1</id>
    <media:group>
      <media:thumbnail url="http://www.abc.com/image.jpg" />
      <trailer url="http://www.abc.com" />
      <info url="http://www.abc.com/xsd/info.jpg" />
      <media:description>1</media:description>
      <media:content name="video.mp4" type="video" duration="400" repeat="true"/>
    </media:group>
    <menu>
      <item uri="localhost:8080/xyzt" />
    </menu>
  </entry>
</feed>

然后,我使用网站http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx 自动转换为XSD 文件(你可以试试)。但是,当我使用网站http://www.xmlforasp.net/schemavalidator.aspx 来检查 XSD 验证器时,当时有一个关于 XSD 格式化的问题
问题:

“名称”属性值“媒体:组”无效:“名称中第 5 位的“:”字符,十六进制值 0x3A,不能包含在名称中。”。

    <xsd:element name="entry">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="title" type="xsd:string" />
          <xsd:element name="id" type="xsd:int" />
          <xsd:element name="media:group">             <!-- here -->
            <xsd:complexType>
              <xsd:sequence>

我不明白...为什么 xsd:element 的名称不能包含“:”字符? 如果上述问题是正确的,我该如何解决。

如果你知道,请帮助我。
非常感谢!

【问题讨论】:

  • 如果您包含架构会很有帮助,因为这就是错误所在。等一下,我会修复它...完成。

标签: xml xsd


【解决方案1】:

尝试不同的验证器。我对这个站点一无所知,但从你的证据来看,他们正在使用非命名空间感知 XML 解析器来解析 XML。这是一件非常奇怪的事情。

【讨论】:

    【解决方案2】:

    “:”之前的文本称为namespace。例如在“media:group”中,命名空间是“media”。

    要在命名空间中定义一个元素,你不能像你期望的那样像&lt;xsd:element name="media:group"&gt; 这样说。

    相反,您必须将其指定为整个架构的 targetNamespace,然后该架构中定义的 所有 元素将具有该命名空间。像这样(qualified 部分意味着您的 XML 需要使用命名空间,就像您的 XML 使用“媒体”一样):

    <xsd:schema targetNamespace="http://search.yahoo.com/mrss/"
                elementFormDefault="qualified" ...>
      ...
      <xsd:element name="group"> 
    

    你也可以有一个元素没有命名空间的架构,omittingtargetNamespace

    <xsd:schema ...>
      ...
      <xsd:element name="entry"> 
    

    注意:要在两个命名空间中定义元素,您需要两个模式。通常,您可以通过importing 将架构组合成另一个。但是您的 XML 存在问题:对命名空间的引用是循环的,因为 &lt;entry&gt; 包含 &lt;media:group&gt;,其中包含 &lt;trailer&gt;

    抱歉:我无法解决这个问题。我最好的尝试使用了第三种模式(定义 &lt;trailer&gt;),但这会导致崩溃 xmllint... 其他人可以解决它吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2011-01-30
      • 2020-07-01
      相关资源
      最近更新 更多