在 XSD 中将 XML 元素设置为无命名空间?

Mr *_*der 1 xml xsd xml-validation

我正在尝试根据 XSD 验证 XML。在这个 XML 中有带命名空间和不带命名空间的标签。

<my:person xmlns:my="http://my.namespace.com">
  <my:name>John Doe</my:name>
  <my:year>1988</my:year>
  <namespaceLessElement>some value</namespaceLessElement>
</my:person>
Run Code Online (Sandbox Code Playgroud)

我的 XSD 看起来像这样。验证失败,因为根据 XSD,namespaceLessElement有一个命名空间。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:myNamespace="http://my.namespace.com"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://my.namespace.com"
           elementFormDefault="qualified">

    <xs:element name="person" type="myNamespace:person"/>

    <xs:complexType name="person">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="year" type="xs:int"/>
            <xs:element name="namespaceLessElement" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我找不到有关如何关闭namespaceLessElement. 有没有办法做到这一点?

kjh*_*hes 5

XSD 中定义的所有组件都在其targetNamespace. 使用xsd:import从不同于该命名空间的命名空间中引入 XSD:

主 XSD

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:myNamespace="http://my.namespace.com"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://my.namespace.com"
           elementFormDefault="qualified">

  <xs:import schemaLocation="namespaceLessElement.xsd"/>

  <xs:element name="person" type="myNamespace:person"/>

  <xs:complexType name="person">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="year" type="xs:int"/>
      <xs:element ref="namespaceLessElement"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

导入的 XSD

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

  <xs:element name="namespaceLessElement" type="xs:string"/>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

然后你的 XML,

<?xml version="1.0" encoding="UTF-8"?>
<my:person xmlns:my="http://my.namespace.com"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://my.namespace.com try.xsd">
  <my:name>John Doe</my:name>
  <my:year>1988</my:year>
  <namespaceLessElement>some value</namespaceLessElement>
</my:person>
Run Code Online (Sandbox Code Playgroud)

将根据要求进行验证。

也可以看看