Poprawne modele zawartości. Zarządzanie zmianami struktury.

36
Poprawne modele zawartości. Zarządzanie zmianami struktury. 30 października 2003

description

Poprawne modele zawartości. Zarządzanie zmianami struktury. 30 października 2003. XML a białe znaki. W modelu elementowym: ignorowane, służą jedynie zwiększeniu czytelności. W modelu tekstowym/mieszanym: stanowią część zawartości tekstowej. Na granicy modeli: ???. - PowerPoint PPT Presentation

Transcript of Poprawne modele zawartości. Zarządzanie zmianami struktury.

Page 1: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Poprawne modele zawartości.Zarządzanie zmianami struktury.

30 października 2003

Page 2: Poprawne modele zawartości. Zarządzanie zmianami struktury.

XML a białe znaki

W modelu elementowym: ignorowane, służą jedynie zwiększeniu czytelności.

W modelu tekstowym/mieszanym: stanowią część zawartości tekstowej.

Na granicy modeli: ???

Page 3: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Model błędnej zawartości (1)

<!ELEMENT hasło (pojęcie, #PCDATA)>

<hasło><pojęcie>zombie</pojęcie>w religiach afrykańskich: osoba zmarła, która może ożyć dzięki magii</hasło>

Równoważny model poprawny:

<!ELEMENT hasło (pojęcie, znaczenie)>

<!ELEMENT znaczenie (#PCDATA)>

Page 4: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Model błędnej zawartości (2)

<!ELEMENT znaczenie (#PCDATA | definicja)>

<hasło><pojęcie>półpłaszczyzna domknięta</pojęcie><znaczenie><definicja>jedna z dwu części płaszczyzny, na które prosta L dzieli tę płaszczyznę, wraz z tą prostą</definicja></znaczenie></hasło>

Równoważny model poprawny:

<!ELEMENT znaczenie (treść | definicja)>

<!ELEMENT treść (#PCDATA)>

Page 5: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Model niejednoznaczny

<!ELEMENT hasło (pojęcie, znaczenie?, etymologia?, znaczenie)>

Równoważny model poprawny:

<!ELEMENT hasło (pojęcie, ((znaczenie, (etymologia?, znaczenie)?) | (etymologia, znaczenie)))>

Page 6: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Elementy w dowolnej kolejności (1)

Konstrukcja SGML-owa:<!ELEMENT wielojęz - - (pol & ang)>

Równoważny model poprawny:

<!ELEMENT wielojęz ((pol, ang) | (ang, pol))>

Page 7: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Elementy w dowolnej kolejności (2)

Konstrukcja SGML-owa:<!ELEMENT wielojęz - - (pol & ang & niem)>

Równoważny model poprawny:

<!ELEMENT wielojęz ((pol, ((ang, niem) | (niem, ang))) | (ang, ((pol, niem) | (niem, pol))) | (niem, ((pol, ang) | (ang, pol))))>

Page 8: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Zarządzanie zmianami w DTD

Problem: niezbędna jest zmiana definicji języka:

zmieniająca się rzeczywistość, uwarunkowania prawne, nowe wymagania, ...

posiadamy zasoby zgodne z aktualną wersją DTD, jak uczynić zmianę kompatybilną wstecz?

Rozwiązanie: nowy model musi być bardziej ogólny od dotychczasowego.

Page 9: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Dozwolone zmiany w DTD (1)

Dodanie elementu opcjonalnego

<!ELEMENT słownik (hasło, (znaczenie | definicja), etymologia?)* >

Zmiana krotności elementu: z wymaganego na opcjonalny, z jednokrotnego na powtarzalny.

<!ELEMENT osoba (imie, nazwisko, adres*)>

Dodanie elementu do alternatywy:<!ELEMENT podróż (samochód | pociąg | samolot | rakieta)*>

Page 10: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Dozwolone zmiany w DTD (2)

Dodanie atrybutu: opcjonalnego, z wartością domyślną, #FIXED

<!ATTLIST wiersz bialy (tak|nie) ”nie”>

Zmiana typu atrybutu: z wymaganego lub #FIXED na opcjonalny lub z wartością domyślną, z opcjonalnego na wartość domyślną i na odwrót.

<!ATTLIST wiersz bialy (tak|nie) ”nie” ><!ATTLIST wiersz bialy (tak|nie) #IMPLIED>

Page 11: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Jak zarządzać zmianami

Zmiany niekompatybilne wstecz – przykład: dodanie elementu wymaganego.

Sposób postępowania w "żywym" systemie: wprowadzamy zmianę kompatybilną wstecz (np. dodajemy element, ale

opcjonalny), instruujemy użytkowników o konieczności migracji do nowej struktury, po dodaniu brakujących elementów (lub po upływie wyznaczonego czasu) –

wprowadzenie zmiany docelowej.

Większe zmiany modelu: deklarujemy osobny element z nowym modelem, przez pewien czas dopuszczamy stary lub nowy model.

Page 12: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Zmiany struktury a aplikacje

Typowa zależność między treścią programu a strukturą danych: w treści programu zakładamy konkretną postać struktur danych, jeśli są to dane wejściowe lub wyjściowe, ich postać może się zmieniać w

czasie, zmiana struktury danych powoduje konieczność zmian w kodzie.

Uniezależnienie aplikacji od zmian struktury danych: znaleźć reguły, według których następują zmiany struktury:

które reguły budowania struktury są niezmienne, co się zmienia;

zakodować informacje zmienne w samej strukturze, sparametryzować aplikację tymi informacjami.

Page 13: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Zmiany struktury a aplikacje – przykład

Aplikacja: edytor dokumentu XML przy pomocy formularza w przeglądarce, każdemu elementowi dokumentu odpowiada pole formularza.

Co się może zmienić: liczba i kolejność pól, etykiety pól.

Jak uniezależnić aplikację od tych zmian?

<!ELEMENT NIP (#PCDATA)><!ATTLIST NIP OPIS CDATA #FIXED "Numer Identyfikacji Podatkowej"

Page 14: Poprawne modele zawartości. Zarządzanie zmianami struktury.

XML Namespaces

Problem: ta sama nazwa oznacza dwa różne byty w różnych dokumentach, dokumenty te są powiązane (np. wspólnie przetwarzane, jeden zanurzony w

drugim, itp.)

Rozwiązanie: przestrzeń nazw – grupa nazw oddzielona (składniowo i semantycznie) od

innych nazw.

Status: rekomendacja W3C z 14 stycznia 1999 r.

Wątpliwości: jak uniknąć (nieświadomego) korzystania z tych samych przestrzeni nazw do

różnych celów, jak definiować przestrzenie nazw.

Page 15: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Deklarowanie i wykorzystanie przestrzeni nazw

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSLT/Transform/1.0" xmlns:szz="http://SzymonZiolo.waw.pl"> <xsl:template match=”wzorzec”> <szz:template><xsl:apply-templates/></szz:template> </xsl:template></xsl:stylesheet>

Page 16: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Widoczność przestrzeni nazw

<?xml version="1.0"?><!-- initially, the default namespace is "books" --><book xmlns='urn:loc.gov:books'      xmlns:isbn='urn:ISBN:0-395-36341-6'>  <title>Cheaper by the Dozen</title>  <isbn:number>1568491379</isbn:number>  <notes>    <p xmlns='urn:w3-org-ns:HTML'>      This is a <i>funny</i> book!    </p>  </notes></book>

Page 17: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Domyślna i lokalna przestrzeń nazw

Domyślna przestrzeń nazw:<reln xmlns="http://www.w3.org/TR/REC-MathML/"> <eq/><cn>2</cn><cn>4</cn></reln>

Lokalna przestrzeń nazw:<przyklad> <reln xmlns="http://www.w3.org/TR/REC-MathML/"> <eq/><cn>2</cn><cn>4</cn> <notatka xmlns="">Czy to jest poprawne?</notatka> </reln></przyklad>

Page 18: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przestrzenie nazw atrybutów

<book xmlns:xlink="http://www.w3.org/XML/XLink/0.9"> <chapter number="1" xlink:type="simple" xlink:href="..."> <title>Introduction</title> </chapter></book>

Atrybut bez prefiksu jest formalnie w innej przestrzeni nazw niż element! element chapter jest w domyślnej przestrzeni nazw, atrybut number jest w lokalnej przestrzeni nazw elementu chapter, atrybut type jest w przestrzeni nazw XLink.

Page 19: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Ograniczenia

Zabronione: użycie niezadeklarowanego prefiksu przestrzeni nazw, dwa atrybuty o tej samej nazwie i różnych prefiksach wskazujących na tą

samą przestrzeń nazw:<x xmlns:n1="http://www.w3.org"    xmlns:n2="http://www.w3.org" >  <bad a="1"     a="2" />  <bad n1:a="1"  n2:a="2" /></x>

Ale to jest legalne: <x xmlns:n1="http://www.w3.org" 

   xmlns="http://www.w3.org" >  <good a="1"  b="2" />  <good a="1"  n1:a="2" /></x>

Page 20: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przestrzenie nazw a DTD

Dwa różne światy: przestrzenie nazw sprawdzają się w dokumentach bez definicji struktury, definiując DTD powinniśmy się obejść bez przestrzeni nazw.

Jeśli koniecznie chcemy używać ich razem: prefiks przestrzeni nazw traktowany jako część nazwy, brak semantyki przestrzeni nazw (a więc i wspomnianych ograniczeń).

<!ELEMENT szz:p (#PCDATA)><!ATTLIST szz:p xmlns:szz CDATA #FIXED "http://SzymonZiolo.waw.pl/paragraf"><!ELEMENT pesel:p (imie, nazwisko, data-ur, stan-cyw)><!ATTLIST pesel:p xmlns:pesel CDATA #FIXED "http://pesel.gov.pl/person">

Page 21: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przestrzenie nazw a XML Schema

Wsparcie dla przestrzeni nazw w XML Schema: deklarowanie schematu w konkretnej przestrzeni nazw

(targetNamespace), importowanie przestrzeni nazw do schematu (import), schematy rozszerzalne:<xsd:any namespace="URI-przestrzeni-nazw | ##any | ##local | ##targetNamespace | ##other" processContents="lax | skip | strict"/>

Page 22: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przestrzenie nazw a aplikacje niezależne od struktury

Przykład: XLink: linki w elementach o dowolnych nazwach, typ linku i jego parametry przekazywane przez specjalne atrybuty.

<osoba xmlns:xlink="http://www.w3.org/1999/xlink"><nazwisko>Kopernik, Mikołaj</nazwisko><biogram>Wybitny polski astronom, urodzony w <geogr xlink:type="simple" xlink:href="Torun.xml">Toruniu</geogr>.</biogram></osoba>

Page 23: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przestrzenie nazw a aplikacje niezależne od struktury

Przykład: aplikacja weryfikująca numery PESEL i daty urodzenia w dokumencie XML, nie powinna zależeć od struktury dokumentu wejściowego, jak "przekazać" aplikacji, co ma zweryfikować?

Rozwiązanie:<podanie xmlns:pv="http://PeselValidator.pl"> <nadawca nr-ewid="60101012345" pv:PESEL="nr-ewid"> <nazwisko>Zenon Niemrawy</nazwisko> <urodzony pv:data-ur="#CONTENT">1960-10-10</data-ur> </nadawca> ...</podanie>

Page 24: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Case study:XML jako format dokumentów

ubezpieczeniowych ZUS

Page 25: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Tło projektu

Formularze ubezpieczeniowe: 22 typy formularzy, przesyłane okresowo przez płatników do ZUS, dotychczas kodowane w pseudo-SGML-u.

Przyczyny zmiany formatu: błędny projekt formatu SGML-owego, rosnąca popularność XML-a, nadchodząca zmiana rozporządzenia określającego strukturę formularzy.

Page 26: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Kolekcja Elektronicznych Dokumentów Ubezpieczeniowych

ZU S ZFB ...

1N r raportu

2O kres rozliczeniow y

01.I dentyfi kator raportu

02.Kod terytorialny ...

...

I .Dane organ izacyjne

01.N I P

02.R EG O N

03.PESEL

...

I I .Dane identyfikacyjne

płatn ika składek

A.01.N azw isko

A.02.I m ię pierw sze

...

B .01 .Kod tytułu ubezpieczenia

...

I I I .Dane dotyczące

osoby ubezpieczonej

01.Data w ypełnienia

V.O św iadczenie

płatn ika składek

ZU S R CB ...

KEDUKolekcja E lektronicznych Dokum entów U bezpieczeniow ych

Page 27: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przykład: fragment formularza ZUS RCB

Page 28: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Problemy

Wybór logicznego modelu struktury dokumentów: model semantyczny, model składniowy.

Modelowanie informacji pozwalających na walidację treści dokumentów.

Modelowanie informacji zwrotnych: informacje o błędach w dokumentach, informacje o korektach automatycznie wprowadzonych przez ZUS.

Oznaczenie pól wypełnianych przez ZUS.

Page 29: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Logiczny model struktury dokumentów

Semantyczny: Składniowy:

DRZBdane-organizacyjne

termin-przys-deklident-deklaracji

dane-ident-platnikaNIPREGON

...

...

RCBdane-organizacyjne

dane-ident-platnika

...

...

DRZBDRZB.01

DRZB.01.01DRZB.01.02

DRZB.02DRZB.02.01DRZB.02.02

...

...

RCBRCB.01

RCB.02

...

...

Page 30: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Logiczny model struktury dokumentów

Model semantyczny: zwięzły i elegancki, pozwala na modelowanie relacji wiele-do-wielu, ale: nazwy szybko przestają być semantyczne.

Model składniowy: łatwość automatyzacji przetwarzania:

operowanie nazwami elementów, generowanie DTD oraz samych dokumentów,

możliwość wzbogacenia o informacje semantyczne.Wybór: model składniowy.

Page 31: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Modelowanie informacji dodatkowych

Informacje dodatkowe: opisy pól, informacje o sposobie walidacji pól, informacje o polach wypełnianych przez ZUS.

Sposób kodowania: atrybuty #FIXED: umieszczane w DTD wraz z wartościami, wartości dostępne w instancji dokumentu, nie ma możliwości zmiany wartości atrybutu w instancji dokumentu.

Page 32: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Informacje dodatkowe – przykład

<!ENTITY % a.wypelnia.zus "WYPELNIA.ZUS CDATA #FIXED 'TAK'">

<!ELEMENT DRSB.01.04 (#PCDATA)><!ATTLIST DRSB.01.04 OPIS CDATA #FIXED "Data nadania" TYP CDATA #FIXED "data" DLUGOSC CDATA #FIXED "8" %a.wypelnia.zus;>

<!ELEMENT DRSB.02.04 (#PCDATA)><!ATTLIST DRSB.02.04 OPIS CDATA #FIXED "Rodzaj dokumentu" TYP CDATA #FIXED "kod" SLOWNIK CDATA #FIXED "rodzaj.dok">

Page 33: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Informacje zwrotne

Nie mogą być kodowane w atrybucie: może być więcej niż jeden błąd lub korekta, dotycząca tego samego pola, zawartości mogą zawierać podelementy, niedozwolony model (#PCDATA, BLAD*, KOREKTA*))

Rozwiązanie: opcjonalne elementy po elemencie, w którym wystąpił błąd.

Page 34: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Informacje zwrotne – przykład

<!ELEMENT BLAD EMPTY><!ATTLIST BLAD KOD CDATA #REQUIRED OPIS CDATA #IMPLIED><!ELEMENT KOREKTA ANY><!ATTLIST KOREKTA NR CDATA #REQUIRED TYP (OCR.1|OCR.2|OCR.3|SYSTEM) #REQUIRED>

<!ENTITY % cm.inf.zwr "(BLAD*, KOREKTA*)">

<!ELEMENT DRSB ((DRSB.01, %cm.inf.zwr;)?, (DRSB.02, %cm.inf.zwr;)?, (DRSB.03, %cm.inf.zwr;)?, ... )>

Page 35: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Przykład:reprezentacja w XML-u

Page 36: Poprawne modele zawartości. Zarządzanie zmianami struktury.

Gdzie szukać dalej

Namespaces in XML, W3C Recommendation: www.w3.org/TR/1999/REC-xml-names

Szymon Zioło, Sztuka hodowli drzew, czyli modele zawartości dokumentów XML

Software 2.0, nr 6/2001, Wydawnictwo Software www.empolis.pl Osiągnięcia Archiwum publikacji

Szymon Zioło, Jak pozostać niezależnym od DTD Software 2.0, nr 6/2002, Wydawnictwo Software

Cezary Górski, Szymon Zioło, Wykorzystanie XML-a w zarządzaniu formularzami ubezpieczeniowymi ZUS

www.empolis.pl Osiągnięcia Publikacje