【发布时间】:2021-01-10 00:41:43
【问题描述】:
我使用的 XSD 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML schema -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Mobiles">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Mobile" type="Mobile" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Mobile">
<xsd:sequence>
<xsd:element name="Model" type="xsd:string"/>
<xsd:element name="OS">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Android"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Origin" type="xsd:string"/>
<xsd:element name="Material" type="xsd:string"/>
<xsd:element name="Samsung" type="Samsung"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Samsung" mixed="true">
<xsd:sequence>
<xsd:element name="Wlan">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="802.11"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CardSlot" type="xsd:string"/>
<xsd:element name="RadioAvailability" type="xsd:boolean" default="true"/>
<xsd:element name="BluetoothAvailability" type="xsd:boolean" default="false"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
XML 文件是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<p7:Mobiles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p7="https://www.w3schools.com"
xsi:schemaLocation="https://www.w3schools.com input.xsd" >
<Mobile>
<Model>G975F</Model>
<OS>Android</OS>
<Origin>USA</Origin>
<Material>Plastic</Material>
<Samsung>
<Wlan>802.11</Wlan>
<CardSlot>MicroSD</CardSlot>
<RadioAvailability>true</RadioAvailability>
<BluetoothAvailability>true</BluetoothAvailability>
</Samsung>
</Mobile>
<Mobile>
<Model>G986</Model>
<OS>Android</OS>
<Origin>USA-Israel</Origin>
<Material>Silicon-Plastic</Material>
<Samsung>
<Wlan>802.11</Wlan>
<CardSlot>MicroSD</CardSlot>
<RadioAvailability>true</RadioAvailability>
<BluetoothAvailability>false</BluetoothAvailability>
</Samsung>
</Mobile>
<Mobile>
<Model>G770F</Model>
<OS>Android</OS>
<Origin>Israel</Origin>
<Material>Silicon-Plastic</Material>
<Samsung>
<Wlan>802.11</Wlan>
<CardSlot>MicroSD</CardSlot>
<RadioAvailability>true</RadioAvailability>
<BluetoothAvailability>false</BluetoothAvailability>
</Samsung>
</Mobile>
</p7:Mobiles>
使用这个 XSD 我遇到了问题:
解析组件“tns:Mobile”时出错。检测到 'tns:Mobile' 在命名空间
'https://www.w3schools.com'中,但是 此命名空间中的组件不可从架构中引用 文档。如果这是不正确的命名空间,可能是 'tns:Mobile' 需要更改。如果这是正确的命名空间, 然后应添加适当的“导入”标签 'input_noTargetNamespace.xsd'。
为了解决这个问题,我检查了这个post 有类似的问题,但我在type="Samsung" 的声明中没有任何命名空间前缀Samsung,所以看起来我缺少其他东西。
有人可以解释这种情况下问题的原因吗?我需要为xsd:schema 添加一些内容吗?如果需要,我可以提供任何其他信息。
【问题讨论】:
-
回滚原因:问题已按提出的方式回答。就涉及导入单独 XSD 的新变体发布一个新问题。
标签: xml xsd xml-namespaces xsd-validation xml-validation