Знакомьтесь с CAM – новой технологией проверки документов XML

Поднимите структурную и семантическую проверку документов XML на новый уровень

Для проверки документов XML используются такие методы, как DTD и, что чаще, XML Schema. Недавно появилась еще одна подобная технология, получившая название "механизм сборки контента" (Content Assembly Mechanism – CAM). Она была разработана консорциумом по развитию стандартов структурированной информации (OASIS) и представляет собой существенный шаг вперед по сравнению с XML Schema, обладая более гибкими возможностями по описанию семантики документов XML и бизнес-правил для проверки их содержимого. Прочитав эту статью, вы получите общее представление о CAM, узнав о ее преимуществах над альтернативными подходами.

Брайан M. Кэри, консультант по информационным системам, Triangle Information Solutions

Photo of Brian CareyБрайан Кэри (Brian Carey) является консультантом по информационным системам, специализирующимся на Java, Java EE, PHP, Ajax и смежных технологиях. Микроблог Брайана доступен по адресу http://twitter.com/brianmcarey.



22.06.2011

Предшественники CAM

Как было сказано выше, CAM является новейшей технологией для проверки документов XML, что, разумеется, означает, что существуют и другие технологии, решающие ту же задачу.

Часто встречающиеся аббревиатуры

  • CCTS: техническая спецификация ключевых компонентов
  • DTD: язык определения типа документов
  • IT: информационные технологии
  • OWL: язык Web-онтологий
  • XPath: язык описания путей в XML
  • XML: расширяемый язык разметки
  • XSD: язык описания схем XML

Наиболее ранней из них является DTD, что в переводе означает "определение типа документа" (Document Type Definition). Как и в случае большинства первоначальных решений, ее возможности были достаточно ограничены. Она позволяла проверять структуру документов, но не предоставляла развитых средств для проверки семантики. Кроме того, DTD обладала достаточно неудобным синтаксисом для описания корректной структуры.

На смену DTD позже пришел XSD (язык описания схем XML), который предоставлял значительно более мощные возможности для проверки документов XML. Во-первых, этот язык имел тот же синтаксис, что и сами документы. Во-вторых, была значительно улучшена поддержка средств для контроля семантики. На протяжении нескольких последних лет большинство разработчиков при проверке документов XML отдавало предпочтение XML Schema, а не DTD.

Появление CAM

История развития технологий знает множество примеров того, что можно бесконечно совершенствовать подходы к решению одних и тех же задач. В этом смысле проблема проверки документов XML отнюдь не является исключением. CAM представляет собой новейшее и наиболее сложное решение в семействе технологий валидации XML, предложенное консорциумом OASIS.

Эта организация является автором множества спецификаций, причем особую известность получили стандарты Web-сервисов и расширяемого языка разметки для электронной коммерции (ebXML).

CAM обладает более гибкими и мощными возможностями, чем все ее предшественники. В отличие от XSD, она позволяет разделить проверку структуры данных и бизнес-правил. Кроме того, CAM предоставляет средства для контекстно-зависимой валидации, которой не доставало в XSD и DTD.

Для многих разработчиков, не знакомых с XML, использование CAM может оказаться значительно проще, чем XSD или DTD. В основном это объясняется тем, что формат документов CAM разительно напоминает формат документов XML. Кроме того, CAM использует хорошо знакомую технологию XPath для описания бизнес-правил.

Структура шаблонов CAM

В листинге 1 приведен пример шаблона CAM. Как видите, в нем нет ничего сложного.

Листинг 1. Структура шаблона CAM
<as:CAM xmlns:as="http://www.oasis-open.org/committees/cam" 
CAMlevel="1" 
version="1.0"> 
<as:Header /> 
<as:AssemblyStructure /> 
<as:BusinessUseContext /> 
</as:CAM>

Корневой элемент CAM определяет уровень, версию и пространство имен CAM, которое затем используется для всех элементов в шаблоне.

Элемент Header содержит специализированную информацию о проверяемом документе. Большинство его дочерних элементов (не показанных в этом примере) не нуждаются в пояснениях, а именно: Description, Owner, Version и DateTime.

Элемент AssemblyStructure описывает структуру проверяемого документа XML. Этот аспект CAM аналогичен XSD, поскольку данный элемент позволяет проверять исключительно структуру документов и не содержит никакой информации относительно их семантики.

Наконец, для описания бизнес-правил служит элемент BusinessUseContext. Однако как именно проверяется, что документ XML удовлетворяет данным правилам? Это очень хороший вопрос, но прежде чем на него ответить, следует ознакомиться с тем, как CAM описывает структуру документов.

Описание структуры документов XML в CAM

В листинге 2 показан пример описания структуры простых торговых заказов.

Листинг 2. Пример описания простой структуры XML, служащей для представления заказов на покупки
<as:AssemblyStructure> 
 <as:Structure ID="myPO" taxonomy="XML"> 
  <PurchaseOrder> 
  <ShippingAddress> 
   <Name>%string%</Name> 
   <Street>%string%</Street> 
   <City>%string%</City> 
   <State>%string%</State> 
   <Zip>%string%</Zip> 
  </ShippingAddress> 
  <ShipDate>%DD-MM-YYYY%</ShipDate> 
  <comment>%string%</comment> 
  <LineItems> 
   <LineItem> 
    <ItemName>%string%</ItemName> 
    <Quantity>%1%</Quantity> 
    <Price>%54321.00%</Price> 
    <Comment>%string%</Comment> 
   </LineItem> 
   </LineItems>
   <TotalPrice>%54321.00%</TotalPrice>
   <ShippingMethod>%string%</ShippingMethod> 
  </PurchaseOrder> 
 </as:Structure> 
</as:AssemblyStructure>

Первое, что бросается в глаза в листинге 2, это то, что шаблон для проверки структуры выглядит практически так же, как и сами проверяемые документы XML. В этом смысле большинство ИТ-специалистов, вероятно, согласятся, что читать шаблоны CAM значительно проще, чем схемы XSD, особенно людям, знакомым с синтаксисом XML. На самом деле шаблоны CAM – это те же документы XML, отличающиеся от проверяемых документов только содержимым, но об этом будет сказано чуть ниже.

Описание структуры проверяемых документов находится внутри элемента Structure. Он содержит атрибут ID, представляющий собой идентификатор структуры. Еще одним атрибутом является taxonomy, который на данный момент может принимать единственное значение – XML.

Обратите внимание, что большинство элементов содержат значения, отмеченные знаком %. Они представляют собой поля для подстановки значений из проверяемого документа XML. Шаблоны CAM с полями подстановки понимать значительно проще, чем если бы они содержали специализированную логику для проверки значений. Некоторые разработчики сами подставляют возможные значения в эти поля в процессе создания шаблонов. Другими словами, как именно использовать эти поля, остается полностью на усмотрение разработчиков шаблонов.

Теперь, когда вы получили представление об описании структуры в шаблонах CAM, можно переходить к вопросам проверки бизнес-правил.

Проверка бизнес-правил в CAM

Все очень просто: для проверки удовлетворения документа бизнес-правилам используется XPath.

Да, именно так: XPath.

Это еще одно преимущество CAM над его предшественниками: для описания бизнес-правил в этой технологии используется язык, который знаком большинству специалистов, работающих с XML. Таким образом, им не придется изучать новый синтаксис для использования CAM в своих приложениях.

Пример элемента BusinessUseContext приведен в листинге 3.

Листинг 3. Пример описания бизнес-правил в CAM
<as:BusinessUseContext> 
 <as:Rules> 
  <as:default> 
   <as:context> 
    <as:constraint action="makeRepeatable(//PurchaseOrder/LineItems/LineItem)"/> 
    <as:constraint action="makeOptional(//LineItem/Comment)"/> 
    <as:constraint action="setLength(//ShippingAddress/State,2)"/> 
    <as:constraint action="setDateMask(//PurchaseOrder/ShipDate,DD-MM-YYYY)"/> 
    <as:constraint action="setNumberMask(//LineItem/Quantity,###)"/> 
    <as:constraint action="setNumberMask(//LineItem/Price,###.##)"/>
    <as:constraint action="setNumberMask(//PurchaseOrder/TotalPrice,###.##)"/> 
    <as:constraint condition="//PurchaseOrder/TotalPrice > 100" 
     action="makeOptional(//PurchaseOrder/ShippingMethod)"> 
   </as:context> 
  </as:default> 
 </as:Rules> 
</as:BusinessUseContext>

Данный фрагмент должен быть понятен любому опытному XML-разработчику не только потому, что для описания ограничений используется XPath, но и благодаря тому, что правила проверки имеют обычные английские наименования. Это еще одна привлекательная черта CAM.

Сами правила определяются внутри элемента context. Каждое из них представляет собой значение атрибута action дочернего элемента constraint.

Обратите внимание на первое правило: makeRepeatable(//PurchaseOrder/LineItems/LineItem). Как следует из названия, данное правило говорит о том, что элемент LineItem  может встречаться несколько раз внутри родительского элемента LineItems. Это совершенно логично, поскольку заказы на покупки, как правило, содержат множество наименований товаров.

Следующее правило касается элементов Comment. Оно гласит, что комментарии не являются обязательными, т.е. документы XML с пустым элементом Comment будут считаться корректными.

Далее следует правило, ограничивающее максимальную длину содержимого элемента State. В данном случае длина не должна превышать двух символов, поскольку этот элемент будет хранить аббревиатуры штатов США.

Следующее правило задает формат представления дат. В данном случае используется формат DD-MM-YYYY, в соответствии с которым корректным представлением даты "3-е марта 2009 г." будет строка 03-03-2009. Разумеется, поддерживаются и другие форматы.

После него идет правило, задающее формат содержимого элемента Quantity. В данном случае этот элемент должен содержать представления чисел в соответствии с маской ###. Это означает, что заказ, включающий строку с четырехзначным значением элемента Quantity, будет признан некорректным. Другими словами, заказы не могут включать более чем 999 единиц одного товара.

Следующие два правила, Price и TotalPrice, похожи на правило Quantity тем, что они также задают маску для представления чисел. При этом их отличием является то, что используемая маска разрешает использование дробных десятичных чисел. Это имеет смысл, поскольку эти элементы служат для представления цены в долларах, которая может иметь дробную составляющую – центы.

Последнее правило представляет особый интерес, поскольку оно является примером контекстно-зависимого ограничения. Так называются ограничения, накладываемые на элементы, при проверке которых необходимо учитывать содержимое окружающих элементов (контекста). Данное правило гласит, что если общая сумма заказа превышает $100, то элемент ShippingMethod в документе XML должен быть пуст. В противном случае он должен быть заполнен. Таким образом, устанавливается бизнес-правило, говорящее о том, что доставка товаров на сумму более $100 осуществляется бесплатно, в то время как для остальных заказов должен быть указан вариант доставки.

Собирая все части воедино

В листинге 4 приведен полный вариант документа CAM, включающий в себя рассмотренные выше фрагменты.

Листинг 4. Полный вариант шаблона
<?xml version='1.0'?> 
<as:CAM CAM level="1" version="1.0" 
	xmlns:as="http://www.oasis-open.org/committees/cam" > 
<as:Header> 
 <as:Description>Simple Purchase Order</as:Description> 
 <as:Owner>developerWorks</as:Owner> 
 <as:Version>0.1</as:Version> 
 <as:DateTime>2009-07-07T12:00:00</as:DateTime> 
</as:Header> 
<as:AssemblyStructure> 
 <as:Structure ID="myPO" taxonomy="XML"> 
  <PurchaseOrder> 
  <ShippingAddress> 
   <Name>%string%</Name> 
   <Street>%string%</Street> 
   <City>%string%</City> 
   <State>%string%</State> 
   <Zip>%string%</Zip> 
  </ShippingAddress> 
  <ShipDate>%DD-MM-YYYY%</ShipDate> 
  <comment>%string%</comment> 
  <LineItems> 
   <LineItem> 
    <ItemName>%string%</ItemName> 
    <Quantity>%1%</Quantity> 
    <Price>%54321.00%</Price> 
    <Comment>%string%</Comment> 
   </LineItem> 
   </LineItems>
   <TotalPrice>%54321.00%</TotalPrice>
   <ShippingMethod>%string%</ShippingMethod> 
  </PurchaseOrder> 
 </as:Structure> 
</as:AssemblyStructure>
<as:BusinessUseContext> 
 <as:Rules> 
  <as:default> 
   <as:context> 
    <as:constraint action="makeRepeatable(//PurchaseOrder/LineItems/LineItem)"/> 
    <as:constraint action="makeOptional(//LineItem/Comment)"/> 
    <as:constraint action="setLength(//ShippingAddress/State,2)"/> 
    <as:constraint action="setDateMask(//PurchaseOrder/ShipDate,DD-MM-YYYY)"/> 
    <as:constraint action="setNumberMask(//LineItem/Quantity,###)"/> 
    <as:constraint action="setNumberMask(//LineItem/Price,###.##)"/>
    <as:constraint action="setNumberMask(//PurchaseOrder/TotalPrice,###.##)"/> 
    <as:constraint condition="//PurchaseOrder/TotalPrice > 100" 
     action="makeOptional(//PurchaseOrder/ShippingMethod)"> 
   </as:context> 
  </as:default> 
 </as:Rules> 
</as:BusinessUseContext> 
</as:CAM>

Шаблон, приведенный в листинге 4, представляет собой нечто большее, чем просто объединение листингов 2 и 3. В частности, он включает элемент Header, в котором содержится идентифицирующая информация о данном шаблоне. В примере выше таковой информацией является текстовое описание, имя владельца, версия и дата документа.

Элемент Header может также включать различные параметры, хотя в листинге 4 они не используются. Параметры служат для управления логикой проверки документов XML. Например, если значением параметра noMoreThan10LineItems является true, то будет активизировано бизнес-правило, согласно которому заказы не могут включать более 10 элементов LineItem. Это очередной пример того, насколько мощные и гибкие возможности предоставляет CAM для валидации XML. При этом для выключения проверки правила достаточно просто изменить значение этого параметра на false.

Преимущества CAM над его предшественниками

То, что некоторая технология является новейшей, отнюдь не гарантирует ее полезности или преимуществ по сравнению с предшественниками. Однако CAM обладает рядом достоинств, которые отличают его от конкурентов.

Во-первых, CAM позволяет отделить проверку структуры документов от проверки бизнес-правил. Подобный принцип разделения ответственности широко используется при разработке программного обеспечения, а не только в CAM. Например, архитектурные принципы "модель–представление–контроллер" (MVC), используемые при создании распределенных приложений, позволяют отделить слой модели от слоев представления и контроллера. В отличие от CAM, в XSD проверка структуры документов и бизнес-правил оказываются тесно связанными друг с другом, что усложняет поддержку и развитие схем.

Во-вторых, CAM поддерживает контекстно-зависимую проверку содержимого. Другими словами, CAM позволяет проверять структуру документа в зависимости от содержимого определенных элементов или атрибутов. Например, если элемент X содержит определенное значение, то бизнес-правило может применяться к элементу Y, в противном случае – к элементу Z. Пример подобной логики валидации был продемонстрирован в последнем правиле листинга 3, в соответствии с которым заказы на сумму выше $100 не содержали информации о способе доставки, поскольку стандартная доставка для них осуществляется бесплатно. Подобные сложные сценарии проверки не поддерживаются предшественниками CAM.

CAM значительно облегчает анализ наборов правил и требуемой структуры документов. Структура описывается в виде XML и выглядит аналогично самим проверяемым документам, благодаря чему ее легко интерпретировать как пользователям, так и компьютерам. Для описания бизнес-правил используется интуитивно понятный язык, например, такие не требующие пояснений названия, как makeRepeatable, makeOptional, setLength и т.д. Несмотря на то, что бизнес-правила отделены от структуры, оба этих компонента находятся внутри одного шаблона, что позволяет легко оценить все требования к проверяемым документам. Работа с XSD, в свою очередь, требует изучения множества новых синтаксических конструкций, например complexType (кстати, что означает этот элемент?), которые не всегда легко интерпретировать.

CAM придерживается принципа "Вам не придется изучать новые технологии" в еще одном аспекте, а именно в использовании XPath. Как было продемонстрировано выше, XPath используется в качестве языка для указания элементов, к которым применяются бизнес-правила. Преимущества этого решения не ограничиваются тем, что XPath – это простой и интуитивно понятный язык. Он также известен большинству специалистов, работающих с XML, что значительно облегчает использование CAM, поскольку им не придется изучать абсолютно новый синтаксис для описания бизнес-правил. Этим CAM разительно отличается от XSD, в которой используются совершенно другие синтаксические конструкции.

Еще одним преимуществом CAM над XSD является упрощение проверок, касающихся локализации. Например, перечислимые типы в XSD являются статичными, поэтому не могут зависеть от контекста. Используя CAM, вы можете динамически выбирать нужное перечисление в зависимости от значений контекстных элементов. Это преимущество обладает особенной значимостью в свете глобализации информационного рынка.

Наконец, шаблоны CAM поддерживают сервисно-ориентированную архитектуру (SOA) следующего поколения, а также технологии обработки деловой информации, например язык выполнения бизнес-процессов (Business Process Execution Language – BPEL), XML-схему спецификации бизнес-процессов (Business Process Specification Schema – BPSS) и нотацию моделирования бизнес-процессов (Business Process Modeling Notation – BPMN). Страница в Википедии, посвященная CAM, говорит следующее: "CAM предоставляет средства, которые могут использоваться для поддержки технологий организации семантических реестровых связей (например, ebXML-regrep), а также технологий описания метаданных (например, CCTS или OWL). Эти средства являются внешними по отношению к шаблонам и обладают исключительной важностью для взаимодействия с приложениями SOA следующего поколения". Кроме того, CAM был создан в OASIS, так что вы можете быть полностью уверены в совместимости этой технологии с другими стандартами этой организации.

Заключение

CAM является представителем последнего поколения технологий проверки документов XML, обладая множеством преимуществ по сравнению со своими предшественниками. К ним относятся отделение проверки структуры документов от бизнес-логики, поддержка динамической валидации, возможности интеграции с новейшими стандартами, а также простота для обучения и легкость поддержки шаблонов. Кроме того, CAM является продуктом OASIS – уважаемого института стандартизации.

CAM пока находится в фазе активного развития, поэтому пока ей не хватает документации и накопленного в достаточном объеме опыта использования. Тем не менее первая выпущенная версия выглядит весьма убедительно и обещает стать значительно более эффективным средством валидации XML, чем ее конкуренты.

На данный момент можно с высокой степенью уверенности утверждать, что CAM обретет популярность и постепенно вытеснит своих предшественников.

Ресурсы

Научиться

Получить продукты и технологии

  • Загрузите ознакомительные версии продуктов IBM и опробуйте инструменты разработки приложений, а также связующее программное обеспечение IBM семейств DB2®, Lotus®, Rational®, Tivoli® и WebSphere®. (EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы в первый раз заходите в developerWorks. Выберите данные в своем профиле (имя, страна/регион, компания) которые будут общедоступными и будут отображаться, когда вы публикуете какую-либо информацию. Вы можете изменить данные вашего ИБМ аккаунта в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML
ArticleID=682021
ArticleTitle=Знакомьтесь с CAM – новой технологией проверки документов XML
publish-date=06222011