我有以下xsd,我无法弄清楚为什么它"Namespace is not available to be referenced in this schema"
上有错误"element"
以及如何修复它:
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="PlayerPlayer"
parent="xmlTest"
parent-key="PlayerID"
child="xmlTest"
child-key="ParentID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="team">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="player" type="playerType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="playerType">
<xsd:sequence>
<xsd:element name="playerID" type="xsd:ID"/>
<xsd:element name="playerName" type="xsd:string"/>
<xsd:element name="playerCap" type="playerType"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
当我删除type="playerType"
时,没有错误。但我需要它,因为我想支持递归关系。我还需要sql,因为我需要在数据库中使用Xml Bulk Load。
以下是您需要的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<team xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation='TestRecursive.xsd'>
<player>
<playerID>c1</playerID>
<playerName>Tommy Jones</playerName>
<playerCap>
<playerID>c2</playerID>
<playerName>Eddie Thomas</playerName>
<playerCap>
<playerID>c4</playerID>
<playerName>Patrick O’Shea</playerName>
</playerCap>
</playerCap>
</player>
</team>
感谢任何帮助!
答案 0 :(得分:0)
从根@targetNamespace="http://www.w3.org/2001/XMLSchema"
元素中删除xsd:schema
,错误就会消失。
@targetNamespace
表示由XSD管理的XML文档实例的XML名称空间。您几乎肯定不希望XML文档位于XSD名称空间中。
事实上,您的示例XML不使用名称空间,因此您根本不需要@targetNamespace
。如果您确实想要使用名称空间,那么您对playerType
的引用必须以声明与@targetNamespace
的值匹配的名称空间前缀作为适当的前缀。
最后注意xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
的声明与错误没有任何关系。