为什么Oxygen生成具有空xmlns属性的子元素?

时间:2013-06-04 15:02:06

标签: xml xsd namespaces schema oxygenxml

我正在尝试掌握使用默认命名空间的技术方面,从架构开始(开发一个)并考虑一个现实和正确的相应XML文件。

我正在使用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>

和oxygen生成一个示例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. 为什么Oxygen会生成具有空xmlns属性的子元素?
  2. 我怎样才能避免这种情况?
  3. 是否可以创建一个可以正确描述和验证XML文档的模式,而该模式没有声明的命名空间(默认或其他)。
  4. 如果(c)的答案是“是”,您将如何修改我的架构示例
  5. 什么是一个非常好的文档,可以更深入地解释所有这些,但同时可读(即,我在http://www.w3.org/XML/找不到易于理解或阅读的文档)。

1 个答案:

答案 0 :(得分:2)

  1. 因为有问题的元素不在任何命名空间中。它们不能使用备用前缀,因为不合格的扩展名称只能由未加前缀的名称表示。但它们是使用非空默认命名空间的元素的子元素。因此,它们可以出现在文档中的唯一方法是清除默认的名称空间声明。

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

  3. 是。

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

  5. Google是您的朋友。