如何使用 XSD 架构 link XML 文件?
How to link XML file with XSD schema?
我是 XML 的新手。有人可以帮我将 XSD 连接到 XML 文件吗?
这是我的 XML:
<WorldWideHappiness
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com/xml Hapiness.xsd">
<Record>
<Country>
<Name>The Netherlands</Name>
<Region>Western Europe</Region>
<HappinessRank>7</HappinessRank>
<HappinessScore>7.339</HappinessScore>
<LowerConfidenceInterval>7.284</LowerConfidenceInterval>
<UpperConfidenceInterval>7.394</UpperConfidenceInterval>
<Health>0.81231</Health>
</Country>
</Record>
</WorldWideHappiness>
这是我的 XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.w3schools.com" xmlns="https://www.w3schools.com">
<xs:element name="WorldWideHappiness" type="WorldWideStatistics"/>
<xs:complexType name="WorldWideStatistics">
<xs:sequence>
<xs:element name="Country" type="CountryType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CountryType">
<xs:sequence>
<xs:element name="Name" type="xs:integer"/>
<xs:element name="Region" type="xs:string"/>
<xs:element name="HappinessRank" type="xs:int"/>
<xs:element name="HappinessScore" type="xs:double"/>
<xs:element name="LowerConfidenceInterval" type="xs:double"/>
<xs:element name="UpperConfidenceInterval" type="xs:double"/>
<xs:element name="Health" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
需要修复的问题包括
- 将 XML 中的命名空间与 XSD 的目标命名空间(检查)和
xsi:schemaLocation
中的命名空间文件对之一(修复)相匹配。
- 将
elementFormDefault="qualified"
添加到 XSD。请参阅 this answer 了解原因。
- 修复 XML 中的
Name
以匹配 XSD 类型。
总而言之,以下 XML 对以下 XSD 有效:
XML
<WorldWideHappiness
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com Hapiness.xsd">
<Country>
<Name>1</Name>
<Region>Western Europe</Region>
<HappinessRank>7</HappinessRank>
<HappinessScore>7.339</HappinessScore>
<LowerConfidenceInterval>7.284</LowerConfidenceInterval>
<UpperConfidenceInterval>7.394</UpperConfidenceInterval>
<Health>0.81231</Health>
</Country>
</WorldWideHappiness>
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
elementFormDefault="qualified"
xmlns="https://www.w3schools.com">
<xs:element name="WorldWideHappiness" type="WorldWideStatistics"/>
<xs:complexType name="WorldWideStatistics">
<xs:sequence>
<xs:element name="Country" type="CountryType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CountryType">
<xs:sequence>
<xs:element name="Name" type="xs:integer"/>
<xs:element name="Region" type="xs:string"/>
<xs:element name="HappinessRank" type="xs:int"/>
<xs:element name="HappinessScore" type="xs:double"/>
<xs:element name="LowerConfidenceInterval" type="xs:double"/>
<xs:element name="UpperConfidenceInterval" type="xs:double"/>
<xs:element name="Health" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
另见
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
我是 XML 的新手。有人可以帮我将 XSD 连接到 XML 文件吗?
这是我的 XML:
<WorldWideHappiness
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com/xml Hapiness.xsd">
<Record>
<Country>
<Name>The Netherlands</Name>
<Region>Western Europe</Region>
<HappinessRank>7</HappinessRank>
<HappinessScore>7.339</HappinessScore>
<LowerConfidenceInterval>7.284</LowerConfidenceInterval>
<UpperConfidenceInterval>7.394</UpperConfidenceInterval>
<Health>0.81231</Health>
</Country>
</Record>
</WorldWideHappiness>
这是我的 XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.w3schools.com" xmlns="https://www.w3schools.com">
<xs:element name="WorldWideHappiness" type="WorldWideStatistics"/>
<xs:complexType name="WorldWideStatistics">
<xs:sequence>
<xs:element name="Country" type="CountryType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CountryType">
<xs:sequence>
<xs:element name="Name" type="xs:integer"/>
<xs:element name="Region" type="xs:string"/>
<xs:element name="HappinessRank" type="xs:int"/>
<xs:element name="HappinessScore" type="xs:double"/>
<xs:element name="LowerConfidenceInterval" type="xs:double"/>
<xs:element name="UpperConfidenceInterval" type="xs:double"/>
<xs:element name="Health" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
需要修复的问题包括
- 将 XML 中的命名空间与 XSD 的目标命名空间(检查)和
xsi:schemaLocation
中的命名空间文件对之一(修复)相匹配。 - 将
elementFormDefault="qualified"
添加到 XSD。请参阅 this answer 了解原因。 - 修复 XML 中的
Name
以匹配 XSD 类型。
总而言之,以下 XML 对以下 XSD 有效:
XML
<WorldWideHappiness
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com Hapiness.xsd">
<Country>
<Name>1</Name>
<Region>Western Europe</Region>
<HappinessRank>7</HappinessRank>
<HappinessScore>7.339</HappinessScore>
<LowerConfidenceInterval>7.284</LowerConfidenceInterval>
<UpperConfidenceInterval>7.394</UpperConfidenceInterval>
<Health>0.81231</Health>
</Country>
</WorldWideHappiness>
XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
elementFormDefault="qualified"
xmlns="https://www.w3schools.com">
<xs:element name="WorldWideHappiness" type="WorldWideStatistics"/>
<xs:complexType name="WorldWideStatistics">
<xs:sequence>
<xs:element name="Country" type="CountryType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CountryType">
<xs:sequence>
<xs:element name="Name" type="xs:integer"/>
<xs:element name="Region" type="xs:string"/>
<xs:element name="HappinessRank" type="xs:int"/>
<xs:element name="HappinessScore" type="xs:double"/>
<xs:element name="LowerConfidenceInterval" type="xs:double"/>
<xs:element name="UpperConfidenceInterval" type="xs:double"/>
<xs:element name="Health" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
另见
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?