gpt4 book ai didi

XML XSD 命名空间问题

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:01 26 4
gpt4 key购买 nike

我正在尝试使用银行账户示例定义一个简单的 XML 和 XSD 文件。

这是定义我的 XML 文件的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:bank="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.auto-owners.com/accounts"
>

<xs:element name="accounts" >
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="account"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="account" type="account">
<xs:complexType>
<xs:sequence>
<xs:element ref="uuid"/>
<xs:element ref="name"/>
<xs:element ref="balance"/>
<xs:element ref="status"/>
<xs:element ref="opened"/>
<xs:element ref="closed"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="uuid" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="status" type="xs:NCName"/>
<xs:element name="opened" type="xs:string"/>
<xs:element name="closed" type="xs:string"/>
</xs:schema>

这是我使用上面的 XSD 文件的 XML 文件:

<?xml version="1.1" encoding="UTF-8"?>
<bank:accounts
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.auto-owners.com/Account account.xsd"
xmlns:bank="http://www.auto-owners.com/Account"
>

<bank:account>
<bank:uuid>19cab0a2-c44b-4f3e-b24e-5f21dd23c7e8
</bank:uuid>
<bank:name>Bob Dylan</bank:name>
<bank:balance>1233.12</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>2e2142a2-1c36-4604-9bfd-f0681b89f775
</bank:uuid>
<bank:name>Bonnie Tyler</bank:name>
<bank:balance>34566.21</bank:balance>
<bank:status>active</bank:status>
<bank:opened>03/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>216361b1-0bd5-455d-b6a0-400f92f61d68
</bank:uuid>
<bank:name>Dolly Parton</bank:name>
<bank:balance>9876.32</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/05/2011</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>140ee47a-d323-448d-a5e6-db2454a16934
</bank:uuid>
<bank:name>Gary Moore</bank:name>
<bank:balance>8764.12</bank:balance>
<bank:status>hold</bank:status>
<bank:opened>01/22/2010</bank:opened>
<bank:closed></bank:closed>
</bank:account>
</bank:accounts>

我一直在尝试定义要使用的命名空间,每次我尝试绑定(bind)到 bank: 命名空间时,我都会遇到一系列循环错误。我目前在:

Error resolving component 'account'. It was detected that 'account' has no namespace, but components with no target namespace are not referenceable from schema document 'file:///.../account.xsd'.

有什么想法吗?

最佳答案

以下是您必须更改的内容:

  1. 在您的 XSD 中,正如 Jim Garrison 所说,xmlns:bank="http://www.w3.org/2001/XMLSchema" 错误;这应该是 xmlns:bank="http://www.auto-owners.com/accounts"
  2. 在您的 XSD 中,当您引用类型或元素时,在其前面加上目标命名空间的命名空间前缀。
  3. 在您的 XML 中,xsi:schemaLocation="http://www.auto-owners.com/Account
    account.xsd"
    应该是xsi:schemaLocation="http://www.auto-owners.com/accounts
    account.xsd"
    ; 必须注意案例事项和注意事项以匹配字面上的命名空间。

修改后的XSD如下:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:bank="http://www.auto-owners.com/accounts"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.auto-owners.com/accounts">

<xs:element name="accounts">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="bank:account"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="account">
<xs:complexType>
<xs:sequence>
<xs:element ref="bank:uuid"/>
<xs:element ref="bank:name"/>
<xs:element ref="bank:balance"/>
<xs:element ref="bank:status"/>
<xs:element ref="bank:opened"/>
<xs:element ref="bank:closed"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="uuid" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="status" type="xs:NCName"/>
<xs:element name="opened" type="xs:string"/>
<xs:element name="closed" type="xs:string"/>
</xs:schema>

修改后的XML如下:

<?xml version="1.1" encoding="UTF-8"?>
<bank:accounts
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.auto-owners.com/accounts account.xsd"
xmlns:bank="http://www.auto-owners.com/accounts">
<bank:account>
<bank:uuid>19cab0a2-c44b-4f3e-b24e-5f21dd23c7e8
</bank:uuid>
<bank:name>Bob Dylan</bank:name>
<bank:balance>1233.12</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>2e2142a2-1c36-4604-9bfd-f0681b89f775
</bank:uuid>
<bank:name>Bonnie Tyler</bank:name>
<bank:balance>34566.21</bank:balance>
<bank:status>active</bank:status>
<bank:opened>03/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>216361b1-0bd5-455d-b6a0-400f92f61d68
</bank:uuid>
<bank:name>Dolly Parton</bank:name>
<bank:balance>9876.32</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/05/2011</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>140ee47a-d323-448d-a5e6-db2454a16934
</bank:uuid>
<bank:name>Gary Moore</bank:name>
<bank:balance>8764.12</bank:balance>
<bank:status>hold</bank:status>
<bank:opened>01/22/2010</bank:opened>
<bank:closed></bank:closed>
</bank:account>
</bank:accounts>

以这种方式使用命名空间,XML 现在将针对 XSD 进行验证。

关于XML XSD 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791854/

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