Компоненты подстановочных знаков и проверка содержимого

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Компоненты-шаблоны используются для увеличения гибкости в том, в чем это разрешено для модели содержимого. Эти компоненты поддерживаются в языке XSD следующими способами.

  • Компоненты-шаблоны элемента. Они представлены элементом <xsd:any>.

  • Компоненты-шаблоны атрибута. Они представлены элементом <xsd:anyAttribute>.

Оба подстановочных <xsd:any> знака и <xsd:anyAttribute>поддерживают использование атрибута processContents . Это позволяет задать значение, указывающее, как приложения XML обрабатывают проверку правильности содержимого документа, связанную с этими элементами символа-шаблона. Они являются различными значениями, и их действие заключается в следующем.

  • Значение strict указывает, что содержимое полностью подтверждено.

  • Значение пропуска указывает, что содержимое не проверяется.

  • Значение lax указывает, что только элементы и атрибуты, для которых определения схемы являются доступными, будут подтверждены.

Элементы Lax validation и xs:anyType

В спецификации XML-схемы для элементов типа anyType используется нестрогая проверка. Так как SQL Server 2005 (9.x) не поддерживает нестрогую проверку, строгая проверка была применена для элементов anyType. Начиная с SQL Server 2008 (10.0.x), поддерживается неясная проверка. Содержимое элементов типа anyType будет осуществляться при помощи нестрогой проверки.

Следующий пример демонстрирует использование нестрогой проверки. Элемент e схемы принадлежит типу anyType . В примере создаются типизированные переменные xml и демонстрируется нестрогая проверка элемента типа anyType .

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
</schema>';
GO

Выполнение следующего примера завершится без ошибок, поскольку успешно завершается проверка <e> :

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>';
GO

Следующий пример завершается успешно. Экземпляр принимается, несмотря на то, что элементы <c> в схеме не определены.

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>';
GO

Экземпляр XML в следующем примере отклоняется, так как определение <a> элемента не разрешает строковое значение.

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>Wrong</a><b>data</b></e>';
SELECT @var;
GO

См. также