0

我现在正在与 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"并说“命名空间 '' 不能在此架构中引用”。然后,当我稍后在模式中尝试引用类型“logicalOperator”时,我收到错误“未声明类型逻辑运算符”。我究竟做错了什么?

4

2 回答 2

0

您的架构过于混乱,无法进行精确诊断;假设 XML 命名空间声明只是您所显示的,那么只需添加xmlns="http://www.abc.com/"到您的<xs:schema>元素,您应该能够引用您在同一架构文件或不同架构文件中定义的内容使用不带前缀的名称的相同目标命名空间。

这个片段:

<xs:element type="logicalOperator" .../>

正在尝试查找logicalOperator没有命名空间的类型 - 有时打印为{}logicalOperator

通过添加如上所示的 xmlns,则相同变为{http://www.abc.com/}logicalOperator

说句公道话,XSD 不是唯一一个在这里与你抗衡的人。XML 命名空间:)...

于 2013-04-19T17:09:06.257 回答
0

好的,我得到它的工作。谢谢佩特鲁。

<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>
于 2013-04-22T01:47:22.570 回答