28
XML схема (XML Schema) [email protected] Фёдор Малышкин

XML Schema

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: XML Schema

XML схема (XML Schema)

[email protected]

Фёдор Малышкин

Page 2: XML Schema

2

Фазы использования1. Конфигурация (всё пока нормально)

– малое использование– код писался одним человеком– большой вопрос по необходимости, вообще

2. Веб-сервисы (мелкие странности)– скрытие деталей библиотеками JAXB & JAX-WS

3. Клерки (начинаются проблемы)– ОЧЕНЬ много XML данных– Отсутствие общей договорённости о форматах XML– Регрессионные ошибки при изменении форматов– Сложность поддержания модульных тестов в

актуальном состоянии (проекты “eks-scripts” & “docFlow-engine”)

Page 3: XML Schema

3

ОЧЕНЬ много XML данных<inbox action="new-inbox-item" format="standart"> <from>fromId</from><inbox action="new-inbox-item" format="standart"> <from>fromId</from>

<to>toId</to> <route>REVIEW</route> <item>docId-123</item><to>toId</to> <route>REVIEW</route> <item>docId-123</item>

<cause>TO_REVIEW</cause> <to-date>2008-05-15T15:46:49.081+04:00</to-date> <cause>TO_REVIEW</cause> <to-date>2008-05-15T15:46:49.081+04:00</to-date> <tag>route-id:route-id</tag><tag>route-id:route-id</tag>

<tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-<tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-id:incomingRouteId</tag>id:incomingRouteId</tag>

<tag>parent-klerk:INCOMING</tag> <extended><tag>parent-klerk:INCOMING</tag> <extended>

<comment>comment</comment> <file-attachment>file-id-01</file-attachment><comment>comment</comment> <file-attachment>file-id-01</file-attachment>

</extended> <operation type="reply" id="reply-yes-no" behaviour="close-on-reply"></extended> <operation type="reply" id="reply-yes-no" behaviour="close-on-reply">

<yes-no> <data-validator klerk="REVIEW" question="ValidateData_review"/><yes-no> <data-validator klerk="REVIEW" question="ValidateData_review"/>

</yes-no> </operation> </yes-no> </operation>

<operation type="action" id="action-start-instruction"><operation type="action" id="action-start-instruction">

<start-workflow workflow='INSTRUCTION'><start-workflow workflow='INSTRUCTION'>

<parent-route-id>new assigned to review id</parent-route-id><parent-route-id>new assigned to review id</parent-route-id>

<parent-klerk>REVIEW</parent-klerk><parent-klerk>REVIEW</parent-klerk>

<parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user><parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user>

</start-workflow> </operation> </inbox></start-workflow> </operation> </inbox>

Page 4: XML Schema

4

Отсутствие общей договорённости о форматах XML

<parent-route-id>parent_route_id</parent-route-id>

<parent-klerk>ORDER</parent-klerk>

<parent-user>parent_user_id</parent-user>

и

<tag>route-stage:ASSIGNMENT</tag>

<tag>parent-route-id:parentRouteId</tag>

<tag>parent-klerk:CONTRACT</tag>

Page 5: XML Schema

5

Регрессионные ошибки при изменении форматов XML

Page 6: XML Schema

6

Сложность поддержания модульных тестов в актуальном состоянии

Page 7: XML Schema

7

XML Schema (XML схема)

• XML Schema – название стандарта, формат и синтаксис XML документа, описывающий XML структуры.

• Можно сказать, что это правила (типа регулярных выражений). Потом по этим правилам проверяется – соответствует ли XML документ этим правилам?

• XML документ может сам заявлять, что он соответствует определённой схеме.

Page 8: XML Schema

8

Какие проблемы решит

• Моментальная проверка существующих XML на соответствие новым правилам (быстрая корректировка кодов по провалившимся тестам)

• Единообразие XML данных – уменьшение количества и упрощение кода по работе с XML

• Создание общего словаря с аналитиками, которые всё же хотят знать какие данные передаются между клерками.

Page 9: XML Schema

9

XML документ со схемой

<rootElement xmlns="http://ru.sefer/schema/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ru.sefer/schema/1 http://ru.sefer/schema/1.xsd">

• xmlns – пространство имён по-умолчанию• schemaLocation – местоположение схемы

Page 10: XML Schema

10

Введение

• Схема определяет список элементов и атрибутов, которые могут быть использованы в документе.

• Она также определяет порядок, в котором они появляются в XML и их типы.

• Язык описания XML Schema – XML Schema Definition (XSD)

Page 11: XML Schema

11

Преимущества

• XSD обеспечивает больше контроля над структурой и типами, чем DTD.

• XSD позволяет создавать собственные типы данных.

• XSD позволяет накладывать ограничения на данные.

• Синтаксис схемы такой же как у самого документа - XML.

• XML схема расширяема.

Page 12: XML Schema

12

XML Spy

Page 13: XML Schema

13

Oxygen

Page 14: XML Schema

14

Типы данных

• Тип данных определяет, что может храниться внутри элемента.

• XSD предоставляет ряд предопределённых типов, которые можно классифицировать так:– Примитивные: базовые типы. – Наследованные: определены с использованием

других типов (называемых «базовыми») – Атомарные: примитивные или наследованные,

которые не могут быть разбиты на более мелкие куски

– Списки: наследованный тип, содержащий серию атомарных

– Объединённые: Результат объединения атомарных типов и списков

Page 15: XML Schema

15

Элементы

Существует 2 тип элементов: простые и сложные.

• Простой элемент– Простой элемент не содержит атрибутов или

дочерних узлов– Синтаксис объявления простого элмента:

<xsd:element name="element-name" type="data type" minOccurs="nonNegativeInteger" maxOccurs="nonNegativeInteger|unbounded"/>

Page 16: XML Schema

16

<PRODUCTDATA><PRODUCT PRODUCTID="P001" CATEGORY="BOOKS">

<PRODUCTNAME>Gone With the Wind</PRODUCTNAME>

<DESCRIPTION> The backdrop of this book is the American Civil War</DESCRIPTION>

<PRICE>25.00</PRICE> <QUANTITY>35</QUANTITY></PRODUCT>

</PRODUCTDATA>

<xsd:element name="PRODUCTNAME" type="xsd:string"/><xsd:element name="DESCRIPTION" type="xsd:string"/><xsd:element name="PRICE" type="xsd:positiveInteger"/><xsd:element name="QUANTITY"

type="xsd:nonNegativeInteger"/>

Page 17: XML Schema

17

Элементы

• Сложные элементы– Сложные элементы содержат другие

элементы, атрибуты и сложный контент.– Синтаксис:<xsd:complexType name="data type name">

Content model declaration</xsd:complexType>

Page 18: XML Schema

18

Элементы

• Определение нового простого типа на базу существующего простого типа:

<xsd:simpleType name="phoneno"><xsd:restriction base="xsd:string">

<xsd:length value="8"/><xsd:pattern value="\d{3}-\d{4}"/>

</xsd:restriction></xsd:simpleType>

Page 19: XML Schema

19

Элементы

<xsd:simpleType name="num"><xsd:restriction base="xsd:positiveInteger">

<xsd:maxInclusive value="400"/><xsd:minInclusive value="10"/>

</xsd:restriction></xsd:simpleType>

Page 20: XML Schema

20

Элементы

• Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом– Синтаксис:

<xsd:element name=“ElementName" type=“ComplexDataType"/>

Page 21: XML Schema

21

Элементы

<xsd:complexType name="prdt"><xsd:sequence>

<xsd:element name="PRODUCTNAME" type="xsd:string"/>

<xsd:element name="DESCRIPTION" type="xsd:string"/>

<xsd:element name="PRICE" type="xsd:positiveInteger"/>

<xsd:element name="QUANTITY" type="xsd:nonNegativeInteger"/>

</xsd:sequence></xsd:complexType>

Page 22: XML Schema

22

Прекращаем обучение…

• Полноценное устное обучение XML схемам может занять до 4 часов – так что прекратим.

• Остались не упомянутыми вопросы:– Атрибуты (определение, типы значения и

использование)– Повторное использование определений в

других схемах– Пространство имён– Типы расширений («расширение» и

«ограничение» типа)

Page 23: XML Schema

23

Где можно углубить свои знания по XML схемам

• http://www.w3.org• Teach Yourself XML in 21 Days• Learning XML, 2nd Edition• XML tutorial http://www.w3schools.com/w3c/

Page 24: XML Schema

24

Где можно углубить свои знания по XML схемам

Есть в Confluence…

Page 25: XML Schema

25

Использование в модульных тестах

• Создан специальный под-проект “big-archive-client-docFlow-schemas”.

• У проектов “big-archive-client-docFlow-engine” & “big-archive-client-docFlow-scripts” есть зависимости от него со scope “test”.

Page 26: XML Schema

26

Пример использования@Test

public void testValidateResourcePath() throws XMLSchemaValidationException {

XMLSchemaValidator testable = XMLSchemaValidator.newInstance("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd");

testable.validateResourcePath("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xml");

}

@Test(expected=XMLSchemaValidationException.class)

public void testValidateXml_InvalidXml() throws XMLSchemaValidationException {

XMLSchemaValidator testable = XMLSchemaValidator.newInstance("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd");

testable.validateXml("<tag></tag>");

}

Page 27: XML Schema

27

Предполагаемое использование в модульных тестах клерков

Page 28: XML Schema

28

Дополнительные возможности

• Каждый редактор XML схем (XML Spy & Oxygen) могут составлять тестовые данные по схеме: т.е. генерировать XML.