gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:00:34 25 4
gpt4 key购买 nike

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

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

理想情况下,我希望 XML 文件的用户不必处理默认 namespace (因为当尝试在已声明默认 namespace 的文档上使用 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>

我的问题是:
  • 为什么 Oxygen 生成具有空 xmlns 属性的子元素?
  • 我怎样才能最好地避免这种情况?
  • 是否可以创建一个可以正确描述和验证 XML 文档的模式,该文档没有声明的命名空间(默认或其他)。
  • 如果 (c) 的答案是"is",您将如何修改我的架构示例
  • 什么是更深入地解释所有这些但同时可读的真正好的文档(即,我在 http://www.w3.org/XML/ 中找不到任何易于理解或阅读的文档)。
  • 最佳答案

  • 因为有问题的元素不在任何命名空间中。它们不能使用替代前缀,因为不合格的扩展名称只能由不带前缀的名称表示。但它们是使用非空默认命名空间的元素的子元素。所以它们出现在文档中的唯一方法是清除默认的命名空间声明。
  • 停止将元素声明为不在任何命名空间中。最简单的方法是添加elementFormDefault="qualified"到架构元素。
  • 是的。
  • 省略 targetNamespace xs:schema 上的属性.
  • 谷歌是你的 friend 。
  • 关于xml - 为什么 Oxygen 生成具有空 xmlns 属性的子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921195/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com