为什么氧气生成子元素的xmlns属性为空?

为什么氧气生成子元素的xmlns属性为空?,xml,xsd,namespaces,schema,oxygenxml,Xml,Xsd,Namespaces,Schema,Oxygenxml,当我从一个模式开始(开发一个模式)并考虑一个实际且正确的对应XML文件时,我试图掌握使用默认名称空间的技术方面 我正在使用氧气来设计模式 理想情况下,我希望XML文件的用户不必处理默认名称空间(因为在声明了默认名称空间的文档上尝试使用XPath时,这很痛苦)。然而,从我目前所读到的来看,这似乎是不可能的 我的示例架构如下所示: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.or

当我从一个模式开始(开发一个模式)并考虑一个实际且正确的对应XML文件时,我试图掌握使用默认名称空间的技术方面

我正在使用氧气来设计模式

理想情况下,我希望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 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>

氧气生成一个示例XML,如下所示:

<?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 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>

firstNames0
姓0
2006-05-04T18:13:51.0Z
我的问题是:

  • 为什么氧气会生成具有空xmlns属性的子元素
  • 我怎样才能最好地避免这种情况
  • 是否可以创建一个能够正确描述和验证没有声明名称空间(默认或其他)的XML文档的模式
  • 如果(c)的答案是“是”,您将如何修改我的模式示例
  • 什么是真正好的文档,可以更深入地解释这一切,但同时又可读(即,我觉得文档根本不容易理解或阅读)
  • 因为所讨论的元素不在任何名称空间中。它们不能使用替代前缀,因为非限定扩展名只能由非固定名表示。但它们是使用非空默认名称空间的元素的子元素。因此,它们出现在文档中的唯一方法是清除默认名称空间声明

  • 停止将元素声明为不在任何命名空间中。最简单的方法是向schema元素添加
    elementFormDefault=“qualified”

  • 省略
    xs:schema
    上的
    targetNamespace
    属性

  • 谷歌是你的朋友


  • 嗨,谢谢你的回答。我一直在玩游戏,遇到了一个使用“elementFormDefault=”qualified”的建议,它确实去掉了空的xmlns属性。当然,剩下的就是将所有生成的xml元素放在默认名称空间中,或者放在真正的名称空间中。因此,为了实现最简单的文件,我想继续前进,并尝试您对第4点的建议。这导致了来自氧气的错误。描述:src resolve.4.2:解析组件“结果”时出错。检测到“结果”位于命名空间中。。。诸如此类。。我必须把整个东西放在一个非默认名称空间中。好吧,反复试验,但我还不明白为什么这是必要的。必须在大海捞针的教程中找到那根难以捉摸的针,这篇教程澄清了它。。。谷歌并不总是我的朋友。我更喜欢一本好的全面的书。