Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XML Schema

4,781 views

Published on

Описание XML Schema стандарта и его применение в разработке фирмы Magnetosoft

Published in: Technology
  • Be the first to comment

XML Schema

  1. 1. XML схема (XML Schema) [email_address] Фёдор Малышкин
  2. 2. Фазы использования <ul><li>Конфигурация (всё пока нормально) </li></ul><ul><ul><li>малое использование </li></ul></ul><ul><ul><li>код писался одним человеком </li></ul></ul><ul><ul><li>большой вопрос по необходимости, вообще </li></ul></ul><ul><li>Веб-сервисы (мелкие странности) </li></ul><ul><ul><li>скрытие деталей библиотеками JAXB & JAX-WS </li></ul></ul><ul><li>Клерки (начинаются проблемы) </li></ul><ul><ul><li>ОЧЕНЬ много XML данных </li></ul></ul><ul><ul><li>Отсутствие общей договорённости о форматах XML </li></ul></ul><ul><ul><li>Регрессионные ошибки при изменении форматов </li></ul></ul><ul><ul><li>Сложность поддержания модульных тестов в актуальном состоянии (проекты “eks-scripts” & “docFlow-engine” ) </li></ul></ul>
  3. 3. ОЧЕНЬ много XML данных <ul><li><inbox action=&quot;new-inbox-item&quot; format=&quot;standart&quot;> <from>fromId</from> </li></ul><ul><li><to>toId</to> <route>REVIEW</route> <item>docId-123</item> </li></ul><ul><li><cause>TO_REVIEW</cause> <to-date>2008-05-15T15:46:49.081+04:00</to-date> <tag>route-id:route-id</tag> </li></ul><ul><li><tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-id:incomingRouteId</tag> </li></ul><ul><li><tag>parent-klerk:INCOMING</tag> <extended> </li></ul><ul><li><comment>comment</comment> <file-attachment>file-id-01</file-attachment> </li></ul><ul><li></extended> <operation type=&quot;reply&quot; id=&quot;reply-yes-no&quot; behaviour=&quot;close-on-reply&quot;> </li></ul><ul><li><yes-no> <data-validator klerk=&quot;REVIEW&quot; question=&quot;ValidateData_review&quot;/> </li></ul><ul><li></yes-no> </operation> </li></ul><ul><li><operation type=&quot;action&quot; id=&quot;action-start-instruction&quot;> </li></ul><ul><li><start-workflow workflow='INSTRUCTION'> </li></ul><ul><li><parent-route-id>new assigned to review id</parent-route-id> </li></ul><ul><li><parent-klerk>REVIEW</parent-klerk> </li></ul><ul><li><parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user> </li></ul><ul><li></start-workflow> </operation> </inbox> </li></ul>
  4. 4. Отсутствие общей договорённости о форматах XML <ul><li><parent-route-id>parent_route_id</parent-route-id> </li></ul><ul><li><parent-klerk>ORDER</parent-klerk> </li></ul><ul><li><parent-user>parent_user_id</parent-user> </li></ul><ul><li>и </li></ul><ul><li><tag>route-stage:ASSIGNMENT</tag> </li></ul><ul><li><tag>parent-route-id:parentRouteId</tag> </li></ul><ul><li><tag>parent-klerk:CONTRACT</tag> </li></ul>
  5. 5. Регрессионные ошибки при изменении форматов XML
  6. 6. Сложность поддержания модульных тестов в актуальном состоянии
  7. 7. XML Schema (XML схема ) <ul><li>XML Schema – название стандарта, формат и синтаксис XML документа, описывающий XML структуры. </li></ul><ul><li>Можно сказать, что это правила (типа регулярных выражений). Потом по этим правилам проверяется – соответствует ли XML документ этим правилам? </li></ul><ul><li>XML документ может сам заявлять, что он соответствует определённой схеме. </li></ul>
  8. 8. Какие проблемы решит <ul><li>Моментальная проверка существующих XML на соответствие новым правилам (быстрая корректировка кодов по провалившимся тестам) </li></ul><ul><li>Единообразие XML данных – уменьшение количества и упрощение кода по работе с XML </li></ul><ul><li>Создание общего словаря с аналитиками, которые всё же хотят знать какие данные передаются между клерками. </li></ul>
  9. 9. XML документ со схемой <ul><li><rootElement xmlns=&quot;http://ru.sefer/schema/1&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://ru.sefer/schema/1 http://ru.sefer/schema/1.xsd&quot; > </li></ul><ul><li>xmlns – пространство имён по-умолчанию </li></ul><ul><li>schemaLocation – местоположение схемы </li></ul>
  10. 10. Введение <ul><li>Схема определяет список элементов и атрибутов, которые могут быть использованы в документе. </li></ul><ul><li>Она также определяет порядок, в котором они появляются в XML и их типы. </li></ul><ul><li>Язык описания XML Schema – XML Schema Definition (XSD) </li></ul>
  11. 11. Преимущества <ul><li>XSD обеспечивает больше контроля над структурой и типами, чем DTD . </li></ul><ul><li>XSD позволяет создавать собственные типы данных. </li></ul><ul><li>XSD позволяет накладывать ограничения на данные. </li></ul><ul><li>Синтаксис схемы такой же как у самого документа - XML . </li></ul><ul><li>XML схема расширяема. </li></ul>
  12. 12. XML Spy
  13. 13. Oxygen
  14. 14. Типы данных <ul><li>Тип данных определяет, что может храниться внутри элемента . </li></ul><ul><li>XSD предоставляет ряд предопределённых типов, которые можно классифицировать так : </li></ul><ul><ul><li>Примитивные : базовые типы . </li></ul></ul><ul><ul><li>Наследованные : определены с использованием других типов (называемых «базовыми») </li></ul></ul><ul><ul><li>Атомарные : примитивные или наследованные, которые не могут быть разбиты на более мелкие куски </li></ul></ul><ul><ul><li>Списки : наследованный тип, содержащий серию атомарных </li></ul></ul><ul><ul><li>Объединённые : Результат объединения атомарных типов и списков </li></ul></ul>
  15. 15. Элементы <ul><li>Существует 2 тип элементов: простые и сложные. </li></ul><ul><li>Простой элемент </li></ul><ul><ul><li>Простой элемент не содержит атрибутов или дочерних узлов </li></ul></ul><ul><ul><li>Синтаксис объявления простого элмента : </li></ul></ul><ul><li><xsd:element name=&quot;element-name&quot; type=&quot;data type&quot; minOccurs=&quot;nonNegativeInteger&quot; maxOccurs=&quot;nonNegativeInteger|unbounded&quot;/> </li></ul>
  16. 16. <ul><li>< PRODUCTDATA > </li></ul><ul><li>< PRODUCT PRODUCTID =&quot;P001&quot; CATEGORY =&quot;BOOKS&quot;> </li></ul><ul><li>< PRODUCTNAME >Gone With the Wind</ PRODUCTNAME > </li></ul><ul><li>< DESCRIPTION > The backdrop of this book is the American Civil War</ DESCRIPTION > </li></ul><ul><li>< PRICE >25.00</ PRICE > </li></ul><ul><li> < QUANTITY >35</ QUANTITY > </li></ul><ul><li></ PRODUCT > </li></ul><ul><li></ PRODUCTDATA > </li></ul><ul><li><xsd:element name=&quot;PRODUCTNAME&quot; type=&quot;xsd:string&quot;/> </li></ul><ul><li><xsd:element name=&quot;DESCRIPTION&quot; type=&quot;xsd:string&quot;/> </li></ul><ul><li><xsd:element name=&quot;PRICE&quot; type=&quot;xsd:positiveInteger&quot;/> </li></ul><ul><li><xsd:element name=&quot;QUANTITY&quot; type=&quot;xsd:nonNegativeInteger&quot;/> </li></ul>
  17. 17. Элементы <ul><li>Сложные элементы </li></ul><ul><ul><li>Сложные элементы содержат другие элементы, атрибуты и сложный контент. </li></ul></ul><ul><ul><li>Синтаксис: </li></ul></ul><ul><ul><li><xsd:complexType name=&quot;data type name&quot;> Content model declaration </li></ul></ul><ul><ul><li></xsd:complexType> </li></ul></ul>
  18. 18. Элементы <ul><li>Определение нового простого типа на базу существующего простого типа : </li></ul><ul><li><xsd:simpleType name=&quot;phoneno&quot;> </li></ul><ul><li><xsd:restriction base=&quot;xsd:string&quot;> </li></ul><ul><li><xsd:length value=&quot;8&quot;/> </li></ul><ul><li><xsd:pattern value=&quot;d{3}-d{4}&quot;/> </li></ul><ul><li></xsd:restriction> </li></ul><ul><li></xsd:simpleType > </li></ul>
  19. 19. Элементы <ul><li><xsd:simpleType name=&quot;num&quot;> </li></ul><ul><li><xsd:restriction base=&quot;xsd:positiveInteger&quot;> </li></ul><ul><li><xsd:maxInclusive value=&quot;400&quot;/> </li></ul><ul><li><xsd:minInclusive value=&quot;10&quot;/> </li></ul><ul><li></xsd:restriction> </li></ul><ul><li></xsd:simpleType> </li></ul>
  20. 20. Элементы <ul><li>Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом </li></ul><ul><ul><li>Синтаксис : </li></ul></ul><ul><li><xsd:element name=“ElementName&quot; type=“ComplexDataType&quot;/> </li></ul>
  21. 21. Элементы <ul><li><xsd:complexType name=&quot;prdt&quot;> </li></ul><ul><li><xsd:sequence> </li></ul><ul><li><xsd:element name=&quot;PRODUCTNAME&quot; type=&quot;xsd:string&quot;/> </li></ul><ul><li><xsd:element name=&quot;DESCRIPTION&quot; type=&quot;xsd:string&quot;/> </li></ul><ul><li><xsd:element name=&quot;PRICE&quot; type=&quot;xsd:positiveInteger&quot;/> </li></ul><ul><li><xsd:element name=&quot;QUANTITY&quot; type=&quot;xsd:nonNegativeInteger&quot;/> </li></ul><ul><li></xsd:sequence> </li></ul><ul><li></xsd:complexType> </li></ul>
  22. 22. Прекращаем обучение… <ul><li>Полноценное устное обучение XML схемам может занять до 4 часов – так что прекратим. </li></ul><ul><li>Остались не упомянутыми вопросы: </li></ul><ul><ul><li>Атрибуты (определение, типы значения и использование) </li></ul></ul><ul><ul><li>Повторное использование определений в других схемах </li></ul></ul><ul><ul><li>Пространство имён </li></ul></ul><ul><ul><li>Типы расширений («расширение» и «ограничение» типа) </li></ul></ul>
  23. 23. Где можно углубить свои знания по XML схемам <ul><li>http://www.w3.org </li></ul><ul><li>Teach Yourself XML in 21 Days </li></ul><ul><li>Learning XML, 2nd Edition </li></ul><ul><li>XML tutorial http://www.w3schools.com/w3c/ </li></ul>
  24. 24. Где можно углубить свои знания по XML схемам <ul><li>Есть в Confluence… </li></ul>
  25. 25. Использование в модульных тестах <ul><li>Создан специальный под-проект “big-archive-client-docFlow-schemas”. </li></ul><ul><li>У проектов “big-archive-client-docFlow-engine” & “big-archive-client-docFlow-scripts” есть зависимости от него со scope “test”. </li></ul>
  26. 26. Пример использования <ul><li>@Test </li></ul><ul><li>public void testValidateResourcePath() throws XMLSchemaValidationException { </li></ul><ul><ul><li>XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); </li></ul></ul><ul><ul><li>testable.validateResourcePath(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xml&quot;); </li></ul></ul><ul><li>} </li></ul><ul><li>@Test(expected=XMLSchemaValidationException.class) </li></ul><ul><li>public void testValidateXml_InvalidXml() throws XMLSchemaValidationException { </li></ul><ul><ul><li>XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); </li></ul></ul><ul><ul><li>testable.validateXml(&quot;<tag></tag>&quot;); </li></ul></ul><ul><li>} </li></ul>
  27. 27. Предполагаемое использование в модульных тестах клерков
  28. 28. Дополнительные возможности <ul><li>Каждый редактор XML схем ( XML Spy & Oxygen ) могут составлять тестовые данные по схеме: т.е. генерировать XML. </li></ul>

×