【问题标题】:XSD for XML with namespaced and no namespace elements combinedXSD for XML 与命名空间元素和无命名空间元素组合
【发布时间】:2015-07-13 11:14:34
【问题描述】:

我收到这种 XML:

<?xml version="1.0" encoding="utf-8"?>
<root-element xmlns="SomeSpecificNameSpace">
    <some-elements />
    <some-other-elements/>
    <some-other-other-element/>
    <element-with-empty-namespace xmlns=""/>
</root-element>

我必须检查一下我有这个element-with-empty-namespace,但我不关心内容,所以我尝试了以下方法:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema          targetNamespace="SomeSpecificNameSpace"
                    elementFormDefault="qualified"
                    xmlns="SomeSpecificNameSpace"
                    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyRootElement">
        <xs:complexType>
            <xs:sequence>
            <!-- Others types here -->
            </xs:sequence>
        </xs:complexType>           
    </xs:element>
    <xs:element name="element-with-empty-namespace" minOccurs="0" maxOccurs="1" xmlns="">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:anyAttribute/>
        </xs:complexType>
    </xs:element>
</xs:schema

但它似乎不接受我的元素,说它期待一个名称空间为 SomeSpecificNameSpace 的元素。

我知道这个结构有点奇怪,但是这个element-with-empty-namespace是我们通过XML提供的一个“值”。

【问题讨论】:

  • 我相信 element-with-empty-namespace "inherits" SomeSpecificNamespace 只需在 root-element 内部声明即可
  • 是的,但是我的输入 xml 并不是到处都有相同的命名空间
  • 您需要处理的 XML 与您提供的样本一模一样吗?我说的是 XML 而不是 xsd。
  • 此外,element-with-empty-namespace 应该在 MyRootElement 内,根据 xml 示例,名称应该是 root-namespace。

标签: xml xsd


【解决方案1】:

多个命名空间需要多个 XSD。

为了支持您的 XML 输入结构,

<?xml version="1.0" encoding="utf-8"?>
<root-element xmlns="SomeSpecificNameSpace"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="SomeSpecificNameSpace try.xsd">
  <some-elements />
  <some-other-elements/>
  <some-other-other-element/>
  <element-with-empty-namespace xmlns=""/>
</root-element>

将您的 XSD 分成两个文件,如下所示...

在管理 SomeSpecificNameSpace 命名空间的主 XSD 文件中,使用 xs:import,

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="SomeSpecificNameSpace"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:import schemaLocation="element-with-empty-namespace.xsd"/>

  <xs:element name="root-element">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="some-elements"/>
        <xs:element name="some-other-elements"/>
        <xs:element name="some-other-other-element"/>
        <xs:element ref="element-with-empty-namespace"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

并导入第二个 XSD,

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="element-with-empty-namespace">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute/>
    </xs:complexType>
  </xs:element>
</xs:schema>

在无命名空间中包含 element-with-empty-namespace 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多