Компоненты-шаблоны и проверка достоверности содержимого
Компоненты-шаблоны используются для увеличения гибкости в том, в чем это разрешено для модели содержимого. Эти компоненты поддерживаются в языке XSD следующими способами.
Компоненты-шаблоны элемента. Они представлены элементом <xsd:any>.
Компоненты-шаблоны атрибута. Они представлены элементом <xsd:anyAttribute>.
Оба элемента символа-шаблона — <xsd:any> и <xsd:anyAttribute> — поддерживают использование атрибута processContents. Это позволяет задать значение, указывающее, как приложения XML обрабатывают проверку правильности содержимого документа, связанную с этими элементами символа-шаблона. Они являются различными значениями, и их действие заключается в следующем.
Значение strict указывает, что содержимое полностью подтверждено.
Значение skip указывает, что содержимое не подтверждено.
Значение lax указывает, что только элементы и атрибуты, для которых определения схемы являются доступными, будут подтверждены.
Нестрогая проверка и элементы xs:anyType
В спецификации XML-схемы для элементов типа anyType используется нестрогая проверка. Поскольку в SQL Server 2005 нестрогая проверка не поддерживалась, к элементам anyType применялась строгая проверка. Начиная с версии SQL Server 2008, предоставляется поддержка нестрогой проверки. Содержимое элементов типа 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