Определение типов данных с помощью шаблонов
Все типы данных, как примитивные, так и составные типы, должны быть определены с помощью шаблона. После определения типа данных любой шаблон атрибута может объявить значение определенного типа данных с помощью директивы *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>