XSD为XML命名空间与无命名空间的元素结合

问题描述:

我收到这样的XML:XSD为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提供的一个“价值”。

+0

我相信'element-with-empty-namespace''只是通过在'root-element'内部声明而继承'SomeSpecificNamespace' – sblandin

+0

是的,但是我的输入xml在任何地方都没有相同的名称空间 – J4N

+0

您需要的XML处理过程与您提供的样品完全相同?我在谈论XML而不是xsd。 – sblandin

多个名称空间需要多个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成两个文件如下...

在主XSD文件,它支配着SomeSpecificNameSpace命名空间,使用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元素。