此刻我正在与XSD战斗,这是一种胜利。我正在尝试按如下方式定义类型:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.abc.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType>
<xs:sequence>
<xs:element name="Condition1" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Operator" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="SourceTableValue" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="ValueToCompareTo" minOccurs="1" maxOccurs="1"/>
<xs:element type="logicalOperator" name ="AND" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="logicalOperator" name ="OR" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="logicalOperator" name ="NOT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Condition2" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Operator" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="SourceTableValue" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="ValueToCompareTo" minOccurs="1" maxOccurs="1"/>
<xs:element type="logicalOperator" name ="AND" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="logicalOperator" name ="OR" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="logicalOperator" name ="NOT" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
....
但是,这给了我一个错误,Visual Studio强调 xs:element type =“logicalOperator”,并说“Namespace''不能在此模式中引用”。 然后,当我试图在模式中稍后引用类型“logicalOperator”时,我收到错误“未声明类型logicalOperator”。 我做错了什么?
答案 0 :(得分:0)
您的架构太精确,无法进行精确诊断;假设XML名称空间声明只是您显示的声明,那么只需将xmlns="http://www.abc.com/"
添加到&lt; xs:schema&gt; 元素,您就应该可以引用内容了使用没有前缀的名称在相同的模式文件或具有相同目标名称空间的不同模式文件中定义。
此片段:
<xs:element type="logicalOperator" .../>
正在尝试查找没有命名空间的logicalOperator
类型 - 有时打印为{}logicalOperator
通过添加如上所示的xmlns,然后相同的变为{http://www.abc.com/}logicalOperator
公平地说,XSD不是唯一一个在这里打架的人; XML Namespaces也是:)......
答案 1 :(得分:0)
好的,我明白了。谢谢Petru。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.abc.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:abc="http://www.abc.com/">
<xs:complexType name="logicalOperator">
<xs:sequence>
<xs:element name="Condition1" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Operator" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="SourceTableValue" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="ValueToCompareTo" minOccurs="1" maxOccurs="1"/>
<xs:element type="abc:logicalOperator" name ="AND" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="abc:logicalOperator" name ="OR" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="abc:logicalOperator" name ="NOT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Condition2" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Operator" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="SourceTableValue" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="ValueToCompareTo" minOccurs="1" maxOccurs="1"/>
<xs:element type="abc:logicalOperator" name ="AND" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="abc:logicalOperator" name ="OR" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="abc:logicalOperator" name ="NOT" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>