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>
我的问题是:
- 为什么氧气生成具有空xmlns属性的子元素?
- 我该如何避免这种情况?
- 是否有可能创建一个能够正确描述和验证XML文档的模式,该XML文档没有声明的名称空间(默认或其他)。
- 如果对(c)的回答是'是',那么您将如何修改我的模式示例
- 什么是一个非常好的文档,可以更深入地解释所有这些问题,但可以同时读取即我没有在http://www.w3.org/XML/找到任何简单易懂或阅读的文档)。
嗨,谢谢你的回答。我一直在玩,并遇到了一个建议,使用'elementFormDefault =“限定, 这确实摆脱了空的xmlns属性。但是,我当然要么将所有生成的xml元素放在默认名称空间中,要么放在真正的名称空间中。 因此,为了实现最简单的文件,我想进一步尝试在第4点提出建议。 这导致了氧气的错误。 描述:src-resolve.4.2:解析组件'Result'时出错。它被发现'结果'在命名空间......等等等等。 – svaens
啊..我不得不把整个事情放在一个非默认的命名空间中。好吧,试验和错误,但它对我来说没有意义,但为什么这是必要的。必须在干草堆教程中找到这个难以捉摸的针,澄清它...谷歌并不总是我的朋友。宁愿一本好的彻底的书。 – svaens