导致XQuery错误的XML Schema:简单类型元素不支持'text()'

时间:2014-07-24 20:42:53

标签: xml xsd xquery-sql

BAII编写了以下XML架构(部分):

<xs:schema>
...
<xs:element name="Fields" minOccurs="1" maxOccurs="1">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Field" minOccurs="3" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="title" type="xs:string"/>
              <xs:attribute name="seq" type="xs:int" default="0" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>
...
</schema>

我正在尝试编写一个XML Schema,它允许我使用SQL Server 2012中的XML数据类型查询Field元素的text()属性。

Field元素仅包含文本值和属性(没有其他元素),并且是Fields元素的唯一后代。

我尝试将<simpleContent>更改为<complexContent>,但后来我不确定如何定义扩展标记中所需的基本属性。

XQuery是:

WITH xmlnamespaces('http://www.xxxx.com' as ns) 
SELECT [BAI].query('/ns:XxxFile/ns:Record/ns:Fields/ns:Field/text()')
FROM [dbo].[BTRS]

1 个答案:

答案 0 :(得分:0)

我在Stack Overflow上找到了答案here

我很难搞清楚如何处理具有属性而没有元素的Field元素。我错误地认为唯一要做的就是将内容标记为 simpleContent complexContent 。唯一需要的是将 mixed 属性添加到 complexType 标记并将其设置为true。我更改了上面的架构部分,如下所示:

<xs:schema>
...
<xs:element name="Fields" minOccurs="1" maxOccurs="1">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Field" minOccurs="3" maxOccurs="unbounded">
        <xs:complexType mixed="true">
          <xs:attribute name="title" type="xs:string" default="Unknown" />
          <xs:attribute name="seq" type="xs:int" default="0" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>
...
</schema>

我现在可以在XQuery查询中访问Field元素的文本内容。