Схемы GDL
Средство синтаксического анализа GDL позволяет создавать и реализовывать управляемую данными схему. При указании схемы средство синтаксического анализа проверяет схему и преобразует данные.
Схема описывает структуру и формат данных в связанном исходном файле GDL. Схема может быть определена в самом файле исходных данных GDL или в отдельном файле, на который ссылается исходный файл данных GDL. Схема определяет записи данных, которые могут отображаться в каждой конструкции, и количество определений каждого атрибута. Например, можно определить конструкцию для описания человека. Вам может потребоваться, чтобы конструкция включала имя человека, дату рождения, рост, вес, домашний адрес и некоторые сведения о занятости.
Данные GDL могут выглядеть примерно так, как в следующем примере кода.
*Person: person_ID
{
*Name:
*Birthdate:
*Height:
*Weight:
*HomeAddress:
*EmploymentInfo:
}
Поскольку *HomeAddress и *EmploymentInfo представляют логические группировки информации, их также можно определить как конструкции, как показано в следующем примере кода.
*HomeAddress:
{
*StreetAddress:
*Apt_Number:
*City:
*State:
*Zip:
}
*EmploymentInfo:
{
*Employer:
*Address:
*Position:
*Salary:
*StartDate:
}
Конструкции GDL, как показано в предыдущем примере, не определяют никаких правил синтаксиса для их структуры и содержимого. Например, может существовать два экземпляра конструкции *Person: один из них задает *Вес в килограммах, а другой — *Вес в фунтах. Эти несколько экземпляров могут привести к несогласованности.
Схема GDL предоставляет метод для формального указания структуры и содержимого, которым должны соответствовать входящие данные. Средство синтаксического анализа проверит данные на соответствие этой схеме и предупредит, не соответствуют ли данные или структура данных схеме. Можно указать, являются ли записи обязательными или необязательными (например, Apt) или можно ли их умножать. Например, *Apt_Number может быть необязательным, и один человек может занимать два задания.
Схема позволяет совместно использовать и наследовать определения записей. Например, определение схемы для *Address в *EmploymentInfo может совместно использоваться *HomeAddress. Схема позволяет создавать новые определения на основе существующих определений. Две конструкции Address не обязательно должны быть идентичными, так как они могут быть вариантами, производными от общего наследуемого определения.
Схему можно использовать для указания формата заданного значения атрибута. Например, для схемы может потребоваться, чтобы значение даты было указано в формате ММ-ДД-ГГГГ. Средство синтаксического анализа также может разложить выражения сложных значений на составляющие компоненты и отобразить их в snapshot. Например, клиентскому приложению может потребоваться разделить дату на три отдельных поля, как показано в следующем примере кода.
*Date:
{
*Month: Jan
*Day: 1
*Year: 2001
}
Возможность схемы поддерживать наследование имеет дополнительные последствия. Наследование естественно позволяет расширить схему, сохраняя совместимость. При наличии схемы, производной от другой схемы, файл данных, соответствующий производной схеме, будет автоматически соответствовать исходной схеме. Это наследование позволяет поставщикам настраивать свою схему (и, как следствие, файлы данных), сохраняя при этом совместимость со схемой master (и всеми приложениями, которым требуется соответствие схеме master). На практике поставщик должен ссылаться только на файл, определяющий схему master, и создавать новые определения, наследуемые от определений в схеме master. Поставщику не нужно создавать частную копию схемы master или изменять схему master каким-либо образом. Такая ситуация гарантирует, что поставщику не нужно предпринимать никаких действий при последующем изменении схемы master.
Как показано в предыдущем примере, наследование позволяет исключить общие шаблоны и избежать излишнего дублирования определений и сопутствующего обслуживания. В результате схемы и наборы данных, которые они представляют, могут быть хорошо продуманы и логически структурированы.
Дополнительные сведения об использовании схем на основе наследования см. в разделе Шаблоны GDL.