2013-06-04 30 views
0

我试图掌握使用默认名称空间时的技术方面,从模式开始(开发一个),并考虑一个现实和正确的相应的XML文件。为什么氧气会生成具有空xmlns属性的子元素?

我正在使用Oxygen来设计架构。

理想情况下,我希望XML文件的用户不必处理默认命名空间(因为在试图在声明默认命名空间的文档上使用XPath时,它们很痛苦)。但是,从目前为止我所读到的看来,这是不可能的?

我的示例模式是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.com/" 
    xmlns="http://www.example.com/"> 
    <xs:element name="QueryResponse"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Result"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Result"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Patient"/> 
      </xs:sequence> 
      <xs:attribute name="type" type="xs:NCName"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="VisitNumber" type="xs:string"/> 
    <xs:element name="Demographics"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="1" maxOccurs="1" name="firstNames" type="xs:string"/> 
       <xs:element minOccurs="1" maxOccurs="1" name="surname" type="xs:string"/> 
       <xs:element minOccurs="1" maxOccurs="1" name="dateOfBirth" type="xs:dateTime"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Patient"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Demographics"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

和氧气生成一个示例XML,看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<QueryResponse xmlns="http://www.example.com/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.example.com/ file:/home/me/simplifiedResponse.xsd"> 
    <Result> 
     <Patient> 
      <Demographics> 
       <firstNames xmlns="">firstNames0</firstNames> 
       <surname xmlns="">surname0</surname> 
       <dateOfBirth xmlns="">2006-05-04T18:13:51.0Z</dateOfBirth> 
      </Demographics> 
     </Patient> 
    </Result> 
</QueryResponse> 

我的问题是:

  1. 为什么氧气生成具有空xmlns属性的子元素?
  2. 我该如何避免这种情况?
  3. 是否有可能创建一个能够正确描述和验证XML文档的模式,该XML文档没有声明的名称空间(默认或其他)。
  4. 如果对(c)的回答是'是',那么您将如何修改我的模式示例
  5. 什么是一个非常好的文档,可以更深入地解释所有这些问题,但可以同时读取即我没有在http://www.w3.org/XML/找到任何简单易懂或阅读的文档)。

回答

2
  1. 因为在提问中的任何名称空间都没有。他们不能使用替代前缀,因为不合格的扩展名只能由前缀名表示。但它们是使用非空默认名称空间的元素的子元素。所以他们可以出现在文档中的唯一方法是清除默认的名称空间声明。

  2. 停止声明元素不在任何名称空间中。最简单的方法是将elementFormDefault="qualified"添加到模式元素。

  3. 是的。

  4. 省略xs:schema上的targetNamespace属性。

  5. Google是你的朋友。

+0

嗨,谢谢你的回答。我一直在玩,并遇到了一个建议,使用'elementFormDefault =“限定, 这确实摆脱了空的xmlns属性。但是,我当然要么将所有生成的xml元素放在默认名称空间中,要么放在真正的名称空间中。 因此,为了实现最简单的文件,我想进一步尝试在第4点提出建议。 这导致了氧气的错误。 描述:src-resolve.4.2:解析组件'Result'时出错。它被发现'结果'在命名空间......等等等等。 – svaens

+0

啊..我不得不把整个事情放在一个非默认的命名空间中。好吧,试验和错误,但它对我来说没有意义,但为什么这是必要的。必须在干草堆教程中找到这个难以捉摸的针,澄清它...谷歌并不总是我的朋友。宁愿一本好的彻底的书。 – svaens

相关问题