XCase released!
- Vložil Trupík 1/7/2009 12:27:02 AM
-
Pět programátorů, jedno moudré vedení, devět měsíců vývoje a XCase je na světě. XCase (náš softwarový projekt) je tool pro jednodušší tvorbu a správu XML schémat.
Jak to pracuje – výchozí vrstvou je UML diagram, který v XCase uživatel vytvoří. Sada UML diagramů popisuje UML model a z něj potom vychází další práce s cílem vytvořit sadu XML schémat. Nad UML modelem (Platform Independent Model diagramy – PIM diagramy) uživatel může vytvořit jeden nebo více dalších diagramů (Platform Specific Model diagramů – PSM diagramů), které popisují XML dokumenty a z těchto diagramů již XCase automaticky vytvoří XML schémata. XCase je aplikací MDA - Model Driven Architecture.
Možná bude vše jasnější z obrázku, který jsem si vypůjčil z pondělní prezentace projektu:

XCase byl koncipován pro větší projekty s rozsáhlejším modelem, kde nad jedním modelem existuje větší sada XML schémat (např. nějaká rozsáhlá databáze s větším počtem propojených tabulek, k jejímž jednotlivým částem se přistupuje pomocí webových služeb a každá služba poskytuje dokumenty odpovídající jednomu XML schématu).
V temných dobách (před releasem XCase:o)) mohl být problém s údržbou takové sady schémat – změna jedné tabulky v databázi znamená ruční úpravu všech schémat, které s danou tabulkou pracují. XCase velmi zjednodušuje údržbu schémat, pomáhá automaticky promítnout změny v modelu do jednotlivých schémat.
K tomu i samotné ruční psaní XML schémat není žádný med (teď tedy mluvím o nejužívanějším jazyce – XML Schema), jsou ukecaná a nepříliš přehledná. Grafická notace použitá v XCasu je určitě mnohem vhodnější:o).
Předvedu malý příklad – zde je část UML modelu fiktivní společnosti popisující objednávky produktů.
A takto mohou vypadat XML dokumenty s objednávkami, nejprve ve formě grafické notace:
A ve formě XML schématu popisujícím dokument:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://kocour.ms.mff.cuni.cz/xcase/company/"
targetNamespace="http://kocour.ms.mff.cuni.cz/xcase/company/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="purchase-request" type="Purchase" />
<xs:complexType name="Purchase">
<xs:sequence>
<xs:choice>
<xs:element name="new-customer" type="NewCustomer" />
<xs:element name="reg-customer" type="RegCustomer" />
</xs:choice>
<xs:element name="delivery-address" type="DeliveryAddress" />
<xs:element name="bill-address" type="BillAddress" />
<xs:element name="item-list">
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="Item" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="NewCustomer">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="email" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="RegCustomer">
<xs:attribute name="customer-no" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="DeliveryAddress">
<xs:sequence>
<xs:group ref="DeliveryAddress-c" />
</xs:sequence>
</xs:complexType>
<xs:group name="DeliveryAddress-c">
<xs:sequence>
<xs:element name="street" type="xs:string" />
<xs:element name="postcode" type="xs:string" />
<xs:element name="city" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:complexType name="BillAddress">
<xs:sequence>
<xs:group ref="DeliveryAddress-c" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Item">
<xs:sequence>
<xs:element name="amount" type="xs:int" />
<xs:group ref="Product-c" />
</xs:sequence>
<xs:attributeGroup ref="Product-a" />
</xs:complexType>
<xs:group name="Product-c">
<xs:sequence>
<xs:element name="title" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:attributeGroup name="Product-a">
<xs:attribute name="code" type="xs:string" use="required" />
</xs:attributeGroup>
</xs:schema>
A takto jiný dokument, který popisuje potvrzení objednávky, opět nejprve grafická notace:
A XML schéma:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://kocour.ms.mff.cuni.cz/xcase/company/"
targetNamespace="http://kocour.ms.mff.cuni.cz/xcase/company/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="purchase-response" type="Purchase" />
<xs:complexType name="Purchase">
<xs:sequence>
<xs:element name="item-list">
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="Item" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attributeGroup ref="Customer-a" />
</xs:complexType>
<xs:attributeGroup name="Customer-a">
<xs:attribute name="customer-no" type="xs:string" use="required" />
</xs:attributeGroup>
<xs:complexType name="Item">
<xs:sequence>
<xs:element name="amount" type="xs:int" />
<xs:element name="unit-price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="availability" type="xs:boolean" use="required" />
<xs:attributeGroup ref="Product-a" />
</xs:complexType>
<xs:attributeGroup name="Product-a">
<xs:attribute name="code" type="xs:string" use="required" />
</xs:attributeGroup>
</xs:schema>
Zde je pěkně vidět jak nad jednou částí modelu mohou vzniknout dvě různá schémata. Taky je zde dobře vidět, jak užitečná je grafická notace, protože k tomu, aby se v ní člověk zorientoval, stačí jeden pohled. K tomu, aby se člověk zorientoval v již hotovém schématu, je potřeba mnohem delší zkoumání.
Seznámit se s konstrukty grafické notace je pro práci s XCase nezbytné, všechny jsou popsané v uživatelské dokumentaci (odkaz ke stažení pod článkem) a tak je zde popisovat nebudu.
Pokud vaše požadavky alespoň částečně odpovídají zaměření XCase, zvažte jeho použití – třeba vám usnadní práci. Budeme rádi, pokud ho vyzkoušíte a dodáte nám své návrhy nebo připomínky či nás upozorníte na případné chyby. Program je k dispozici volně ke stažení jako open source.
Odkazy:
Vývojáři:
- Lukáš Kopenec
- Jakub Klímek
- Lucie Kučerová
- Jakub Malý
- Kateřina Opočenská
A vedoucí Martin Nečaský
A na závěr ještě nějaké screenshoty:
