带有命名空间的 XML / XSD

发布于 2025-01-01 08:00:51 字数 825 浏览 0 评论 0原文

我有一个转换后的 XML,我一直在尝试使用创建它的 XSD 来验证它。

转换后的 XML 是:

<?xml version="1.0" encoding="UTF-8"?>
<ifp:Widget xmlns:ifp="Widget.xsd">
    <ifp:Foo>foo</ifp:Foo>
    <ifp:Bar>bar</ifp:Bar>
 </ifp:Widget>

它创建的 XSD(基于原始 xml)是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:element name="Widget">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Foo" type='xs:string'/>
            <xs:element name="Bar" type='xs:string'/>
        </xs:sequence>
    </xs:complexType>
 </xs:element>
</xs:schema>

我收到错误: cvc-elt.1:找不到元素“ifp:Widget”的声明。

I have a transformed XML that I've been trying to validate using the XSD it was created from.

The transformed XML is:

<?xml version="1.0" encoding="UTF-8"?>
<ifp:Widget xmlns:ifp="Widget.xsd">
    <ifp:Foo>foo</ifp:Foo>
    <ifp:Bar>bar</ifp:Bar>
 </ifp:Widget>

The XSD it was created from (based on raw xml) is:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:element name="Widget">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Foo" type='xs:string'/>
            <xs:element name="Bar" type='xs:string'/>
        </xs:sequence>
    </xs:complexType>
 </xs:element>
</xs:schema>

I'm getting an error:
cvc-elt.1: Cannot find the declaration of element 'ifp:Widget'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

薄荷港 2025-01-08 08:00:51

您的架构没有提及任何名为 Widget.xsd 的命名空间。 XML 根本不应该有命名空间,即只有

无论生成 XML 需要查看什么,它都已损坏。

我猜 Widget.xsd 实际上是您的架构的文件名,但它不属于 XML 中的命名空间声明。

Your schema makes no mention of any namespace called Widget.xsd. The XML should have no namespaces at all, i.e. just <Widget>

Whatever generated that XML needs looking at, it's broken.

I'm guessing Widget.xsd is actually the filename of your schema, but that doesn't belong as a namespace declaration in your XML.

善良天后 2025-01-08 08:00:51

要正确地让您的 XML 引用 XSD,请使用如下所示的内容:

<?xml version="1.0" encoding="UTF-8"?>
<Widget xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.yourdomain.com Widget.xsd>
    <Foo>foo</Foo>
    <Bar>bar</Bar>
</Widget>

如果您确实需要定义别名为“ifp”的名称空间,请执行以下操作:

<?xml version="1.0" encoding="UTF-8"?>
<ifp:Widget xmlns:ifp="http://www.yourdomain.com/actualNamespace">
    <ifp:Foo>foo</ifp:Foo>
    <ifp:Bar>bar</ifp:Bar>
</ifp:Widget>

当然,您可以同时使用两者。

To properly have your XML refer to an XSD use something like this:

<?xml version="1.0" encoding="UTF-8"?>
<Widget xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.yourdomain.com Widget.xsd>
    <Foo>foo</Foo>
    <Bar>bar</Bar>
</Widget>

If you really needed to define a namespace aliased as "ifp" do something like this:

<?xml version="1.0" encoding="UTF-8"?>
<ifp:Widget xmlns:ifp="http://www.yourdomain.com/actualNamespace">
    <ifp:Foo>foo</ifp:Foo>
    <ifp:Bar>bar</ifp:Bar>
</ifp:Widget>

You can use both together, of course.

你又不是我 2025-01-08 08:00:51

“它创建的 XSD(基于原始 xml)是:”有点令人困惑......从上下文来看,它表明存在一个 XSD(您列出的),从中生成了 XML,但我不知道不明白“基于原始 xml”是什么意思...您是说 XSD 是由某些东西生成的吗?或者 XSD 基于“原始 xml”...换句话说,XSD 可能应该验证用作转换输入的 XML?

作为添加到已提供的答案的又一个选项,这里是与转换后的 XML 相匹配的 XSD;这里的区别在于模式有一个目标名称空间,该名称空间与“转换后的 XML”使用的名称空间相匹配...

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema xmlns="Widget.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="Widget.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Widget">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Foo" type="xsd:string" />
        <xsd:element name="Bar" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

"The XSD it was created from (based on raw xml) is:" is a bit confusing.... From the context it's suggesting that there was an XSD (that you list), from which the XML was generated but I don't understand what "based on raw xml" means... Are you saying that the XSD was generated from something? Or that the XSD was based on the "raw xml"... In other words, the XSD maybe is supposed to validate the XML used as input into your transformation?

As one more option to add to the already provided answers, here is the XSD that matches your transformed XML; the difference here is that the schema has a target namespace that matches the namespace used by your "transformed XML"...

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema xmlns="Widget.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="Widget.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Widget">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Foo" type="xsd:string" />
        <xsd:element name="Bar" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
你的心境我的脸 2025-01-08 08:00:51

字符串 xmlns:ifp="Widget.xsd" 可能是正确的。请参阅 Wiki:该规范并未完全规定命名空间名称的精确规则(它没有明确规定例如,解析器必须拒绝名称空间名称不是有效统一资源标识符的文档,并且许多 XML 解析器允许使用任何字符串。

但是 XSD 文件中没有任何元素位于该命名空间中。 XSD 文件中的右侧 schema 元素:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="Widget.xsd"
    elementFormDefault="qualified"> 

The string xmlns:ifp="Widget.xsd" may be right. See Wiki: The specification is not entirely prescriptive about the precise rules for namespace names (it does not explicitly say that parsers must reject documents where the namespace name is not a valid Uniform Resource Identifier), and many XML parsers allow any character string to be used.

But no element in your XSD file is in that namespace. Rigth schema element in your XSD file:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="Widget.xsd"
    elementFormDefault="qualified"> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文