Поделиться через


Определение типов данных с помощью шаблонов

Все типы данных, как примитивные, так и составные типы, должны быть определены с помощью шаблона. После определения типа данных любой шаблон атрибута может объявить значение определенного типа данных с помощью директивы *ValueType . Значение этой директивы — это имя шаблона типа данных.

Когда фильтр синтаксического анализа обнаруживает запись данных GDL, которая является экземпляром атрибута, она попытается проанализировать часть значения этой записи в соответствии с правилами синтаксиса, определенными для этого типа данных. При успешном выполнении фильтр синтаксического анализа разместит тип данных в его примитивные типы данных XML-эквивалента и выводит эти значения в соответствующем XML. Созданный XML-код, представляющий составной тип данных, сохраняет логическую структуру исходного определения типа данных. Дочерние элементы составного типа данных задаются именами, определенными тегами, определенными в шаблоне типа данных. Это именование позволяет человеку читателю или программному обеспечению моментального снимка XML легко находить и определять каждое значение в составном типе данных.

Шаблон назначается в качестве шаблона типа данных (который определяет тип данных), задав директиву *Type: DATATYPE . Директивы, распознаваемые в шаблоне типа данных:

*ValueType: [имя шаблона типа данных]. Эта директива объявляет значение атрибута определенного типа данных. Директива *ValueType может отображаться только в шаблонах атрибутов. (Шаблоны атрибутов — это шаблоны с директивой *Type: ATTRIBUTE ).

*DataType: символ. Эта директива имеет одно из следующих значений: PASSTHROUGH, XML_TYPE, XSD_DEFINED, ПЕРЕЧИСЛИТЕЛЬ, FILTER_TYPE, МАССИВ, СОСТАВ или MULTIPLE_PERSONALITY.

*ElementType: list. Эта директива определяет список имен типов данных TEMPLATE.

*RequiredDelimiter: разделитель. Эта директива определяет разделитель со строкой с кавычками.

*OptionalDelimiter: разделитель. Эта директива определяет необязательный разделитель со строкой с кавычками.

*ArrayLabel: символ. Эта директива определяет метку массива со строкой с кавычками.

*ElementTags: list. Эта директива определяет список символов, используемых для тегов элементов.

*ListorList: list. Эта директива определяет список символов, используемых для списка перечислителя.

*XSDTypeDefinition: символ. Эта директива определяет произвольное значение, заключенное <элементами Begin/EndValue> , которое будет использоваться для определения типа XSD.

*ComplexType?: boolean. Эта директива определяет, является ли тип сложным или нет. Если значение равно TRUE, тип является сложным; в противном случае тип прост.

*ArraySize: целое число. Эта директива определяет диапазон массива. Для указания диапазона массива можно использовать до двух целых чисел.

*XMLDataType: string. Эта директива определяет тип xml-данных со строкой с кавычками.

FilterTypeName: string. Эта директива определяет имя типа фильтра с помощью строки с кавычками.

*MaxValue: целое число. Эта директива определяет максимальный размер значения с помощью целого числа GDL.

*MinLength: целое число. Эта директива определяет минимальную длину значения с помощью целого числа, отличного от отрицательных значений GDL.

*MaxLength: целое число. Эта директива определяет максимальную длину значения с помощью целого числа неотрицательных GDL.

Примечание. Не все директивы распознаются во всех шаблонах типов данных.

Как правило, если шаблон не может быть привязан к записи атрибута GDL, значение этого атрибута будет выдаваться в моментальном снимке без каких-либо изменений в разделе CDATA. CDATA должен находиться в виде содержимого элемента (т. е. дочернего элемента) элемента ATTRIBUTE.

Например, предположим, что средство синтаксического анализа не может найти шаблон, описывающий следующую запись атрибута GDL.

*ModelName: "OEMName LaserJet "

Затем запись появится в моментальном снимке следующим образом.

    <GDL_ATTRIBUTE Name="*ModelName" 
        <![CDATA["OEMName LaserJet "]]></GDL_ATTRIBUTE>