Co będzie?

I. Część

II. Część

TopicMaps, czyli sposób na przechowywanie informacji semantycznej w plikach.

Co to tak naprawdę XML?

[w3c]

Czyli co zawiera specyfikacja XML 1.0

A czego nie ma w specyfikacji?

Jeżeli każdy może sobie dowolnie konstruować pliki to jak tu definiować jakieś ogólne standardy?

Mówiąc o standardzie nie mam tu na myśli żadnego wcielenia XMLa (np. XHTML albo MathML), ale standard wspólny dla wszystkich wcieleń.

Namespaces in XML

Przestrzenie nazw (XML-Names) umożliwiają używanie w jednym dokumencie elementów z różnych wcieleń XMLa.

Na przykład w dokumencie XHTMLowym można umieścić równanie zapisane w standardzie MathML:

<html xmlns="http://www.w3.org/1999/xhtml"
         xmlns:math="http://www.w3.org/1998/Math/MathML" ... >
  ...
<body>
  <p>
    Mój ulubiony wielomian to
    <math:apply>
      <math:plus/>
      <math:apply>
        <math:power/>
        <math:ci>x</math:ci>
        <math:cn>2</math:cn>
      </math:apply>
       <math:cn>1</math:cn>
    </math:apply>
  </p>
  ...
</body>
</html>

Składnia XML-Names

Składnia XML-Names - c.d.

XML-Names w przykładach

Dwa poniższe dokumenty powinny być (muszą!) zinterpretowane tak samo.

<root xmlns="http://karolb.prv.pl/ns1">
  <a:elt xmlns:a="http://karolb.prv.pl/ns2">
    <a:sub atr="value1"/>
  </a:elt>
  <second/>
</root>

<b:root 
    xmlns="http://karolb.prv.pl/ns2"
    xmlns:b="http://karolb.prv.pl/ns1">
  <elt>
    <sub b:atr="value1"/>
  </elt>
  <second xmlns="http://karolb.prv.pl/ns1"/>
</b:root>

Powiązanie standardów

[standardy]

Obrazek w formacie SVG

Prosty język zapytań: XPath

Przykłady XPath

Przykładów z XPath c. d.

XPath w dokumencie

Zapytanie: /doc//para/title

Dokument z zaznaczonym wynikiem:

<?xml version="1.0"?>
<doc>
  <title>Sample document</title>
  <para>
    <title>Introduction</title>
    <para>...</para>
  </para>
  <para>
    <para>
      <title><b>XPath</b> implementation</title>
    <para>
    ...
    </para>
  </para>
</doc>

Wyjaśnienia do zapytań

XPointer

Składnia XPointera: części

Składnia XPointera: wybieranie węzłów

XPointer w dokumencie: range-to

Zapytanie: xpointer(//doc/para[2]/range-to(para[3])

Dokument z zaznaczonym wynikiem:

<?xml version="1.0"?>
<doc>
  <para>...</para>
  <para>
    <title>...</title>
    <para/>
    <para/>
  </para>
  <para>...</para>
</doc>

XPointer w dokumencie: string-range

Zapytanie: xpointer(string-range(//*, "and")

Dokument z zaznaczonym wynikiem:

<?xml version="1.0"?>
<doc>
  <para>
    ...
  </para>
  </para>
    ... Cow and Chicken ..
  <para>
     ... and ....
  </para>
</doc>

XML-Base

Przykład XML-Base

Dokument http://karolb.prv.pl/test-doc.xml (ważne!):
<?xml version="1.0"<?
<doc>
  <a href=doc2.xml">link</a>
  <sub xml:base="subdir/">
    <a href=doc2a.xml" xlink:type="simple" xlink:href="doc2a.xml">click</a>
  </sub>
</doc>

Pierwszy link oznacza http://karolb.prv.pl/doc2.xml a drugi http://karolb.prv.pl/subdir/doc2a.xml.

Oprócz linków XHTMLowych w przykładzie jest też XLink.

XLink

XLink - c.d.

Po co linki w zewnętrzych plikach?

Po co linki między wieloma zasobami?

Dla konserwatystów: xlink może wyglądać tak <elt xlink:type="simple" xlink:href="http://karolb.prv.pl">Visit me!<elt>, ale na razie o tym zapominamy.

Główne pojęcia w XInclude

Teraz mówimy o linkach rozszerzonych (ang. extended)

[xlink: zasoby]

Przykład prostego linku

<courseload 
  xlink:type="extended" 
  xmlns:xlink="http://www.w3.org/1999/xlink">

  <tooltip 
    xlink:type="title">Course Load for Pat Jones</tooltip>

  <person
    xlink:type="locator"
    xlink:href="students/patjones62.xml"
    xlink:label="student62"
    xlink:role="http://www.example.com/linkprops/student"
    xlink:title="Pat Jones" />

  <person
    xlink:type="locator"
    xlink:href="profs/jaysmith7.xml"
    xlink:label="prof7"
    xlink:role="http://www.example.com/linkprops/professor"
    xlink:title="Dr. Jay Smith" />

  <course
    xlink:type="locator"
    xlink:href="courses/cs101.xml"
    xlink:label="CS-101"
    xlink:title="Computer Science 101" />

  <gpa
    xlink:type="resource"
    xlink:label="PatJonesGPA">3.5</gpa>

  <!-- następny przykład to będzie ten fragment -->
  
</courseload>

Kilka wyjaśnień

Łuki i przejścia

[xlink: łuki]

Przykład kodu (łuki)

Poniższy kod to uzupełnienie xlinku sprzed trzech slajdów.

  <go
    xlink:type="arc"
    xlink:from="student62"
    xlink:to="PatJonesGPA"
    xlink:show="new"
    xlink:actuate="onRequest"
    xlink:title="Pat Jones's GPA" />
  <go
    xlink:type="arc"
    xlink:from="CS-101"
    xlink:arcrole="http://www.example.com/linkprops/auditor"
    xlink:to="student62"
    xlink:show="replace"
    xlink:actuate="onRequest"
    xlink:title="Pat Jones, auditing the course" />
  <go
    xlink:type="arc"
    xlink:from="student62"
    xlink:arcrole="http://www.example.com/linkprops/advisor"
    xlink:to="prof7"
    xlink:show="replace"
    xlink:actuate="onRequest"
  xlink:title="Dr. Jay Smith, advisor" />

Parę wyjaśnień

Ładny przykład na etykiety

<extendedlink xlink:type="extended">
  <loc xlink:type="locator" xlink:href="..." xlink:label="parent" xlink:title="mother" />
  <loc xlink:type="locator" xlink:href="..." xlink:label="parent" xlink:title="father" />
  <loc xlink:type="locator" xlink:href="..." xlink:label="child"  xlink:title="daughter" />
  <loc xlink:type="locator" xlink:href="..." xlink:label="child"  xlink:title="son 1" />
  <loc xlink:type="locator" xlink:href="..." xlink:label="child"  xlink:title="son 2" />
  <go xlink:type="arc" xlink:from="parent" xlink:to="child" />
</extendedlink>

Tutaj jeden łuk go generuje przejścia od każdego z rodziców do wszystkich dzieci

Jak interpretować XLinki?

Przykład na potrzeby WWW.

Znowu XLink prosty

Odpowiedniość między linkami prostymi a rozszerzonymi.
<studentlink xlink:href="...">Pat Jones</studentlink>
Powyżej prosty, poniżej rozszerzony.
<studentlink xlink:type="extended">
  <resource
    xlink:type="resource"
    xlink:label="local">Pat Jones</resource>
  <locator
    xlink:type="locator"
    xlink:href="..."
    xlink:label="remote"
    xlink:role="..."
    xlink:title="..." />

  <go
    xlink:type="arc"
    xlink:from="local"
    xlink:to="remote"
    xlink:arcrole="..."
    xlink:show="..."
    xlink:actuate="..." />
</studentlink>

XInclude

Przykład włączania 1: xml i text

Dokument źródłowy:
<doc>
  <xi:include src="inc1.xml" parse="xml"/>
  <after-first-incl/>
  <xi:include src="inc1.xml" parse="text"/>
  after-all
</doc>
Plik inc1.xml:
<inc>
  <b>inc</b>luded
</inc>
Wynik:
<doc>
  <inc>
    <b>inc</b>luded
  </inc>
  <after-first-incl/>
  &lt;inc&gt;
    &lt;b&gt;inc&lt;/b&gt;luded
  &lt;/inc&gt;
  after-all
</doc>

Przykład włączania 2: xpointer

Dokument źródłowy:
<doc>
  <xi:include src="inc2.xml@#xpointer(//para)" parse="xml"/>
</doc>
Plik xml1.xml:
<inc>
  <title>a title<title>
  <para>paragraph 1<para>
  <para>paragraph 2<para>
</inc>
Wynik:
<doc>
  <para>paragraph 1<para>
  <para>paragraph 2<para>
</doc>

Mój program

Dlaczego to nie program na 3 dni?

Czy się tego używa?

Tak.

TopicMaps

[w3c]

Podmiot (ang. subject)

Temat (ang. topic)

Temat w składni XTM

<topic id="hamlet">
  <instanceOf><topicRef xlink:href="#play"/></instanceOf>
  <baseName>
    <baseNameString>Hamlet, Prince of Denmark</baseNameString>
  </baseName>
  <occurrence>
    <instanceOf><topicRef xlink:href="#plain-text-format"/></instanceOf>
    <resourceRef
      xlink:href="ftp://www.gutenberg.org/pub/gutenberg/etext97/1ws2610.txt"/>
  </occurrence>
</topic>

Jak zdefiniować podmiot?

Tak wygląda temat Polska (dla ciekawych)

<topic id="PL">
  <instanceOf><topicRef xlink:href="#country-name"/></instanceOf>
  <baseName><scope><topicRef xlink:href="#alpha2"/></scope>
    <baseNameString>PL</baseNameString></baseName>
  <baseName><scope><topicRef xlink:href="#alpha3"/></scope>
    <baseNameString>POL</baseNameString></baseName>
  <baseName><scope><topicRef xlink:href="language.xtm#en"/></scope>
    <baseNameString>Poland</baseNameString></baseName>
  <baseName><scope><topicRef xlink:href="language.xtm#en"/>
    <topicRef xlink:href="#uppercase"/></scope>
    <baseNameString>POLAND</baseNameString></baseName>
</topic>

<topic id="country-name">
  <instanceOf><topicRef xlink:href="core.xtm#class"/></instanceOf>
  <subjectIdentity>
    <subjectIndicatorRef xlink:href="#country-code-desc"/>
  </subjectIdentity>
  <baseName>
    <scope><topicRef xlink:href="language.xtm#en"/></scope>
    <baseNameString>ISO Country Code</baseNameString>
    <variant>
      <parameters>
        <topicRef xlink:href="language.xtm#en"/>
        <topicRef xlink:href="core.xtm#display"/>
      </parameters>
      <variantName>
      <resourceRef xlink:href="#country-code-desc"/>
      </variantName>
    </variant>
  </baseName>
  <occurrence>
    <resourceData id="country-code-desc">
      ISO Country Code: a code representing the name of a country or country
      subdivision, as listed in the ISO standard for country codes.
    </resourceData>
  </occurrence>
</topic>

Trzy sposoby powiedzenia, że temat dotyczy podmiotu

Przykłady

<topic id="dk">
  <subjectIdentity>
    <subjectIndicatorRef
      xlink:href="http://www.topicmaps.org/xtm/1.0/country.xtm#dk"/>
  </subjectIdentity>
</topic>

<topic ...>
  <subjectIdentity>
    <topicRef
      xlink:href="http://www.topicmaps.org/xtm/1.0/language.xtm#en"/>
  ...
</topic>

<topic ...>
  <subjectIdentity>
    <resourceRef
	  xlink:href="ftp://www.gutenberg.org/pub/gutenberg/etext97/1ws2610.txt"/>
  ...
</topic>

Wystąpienie (ang. occurrence)

<topic id="hamlet">
  ...
  <occurrence>
    <instanceOf><topicRef xlink:href="#plain-text-format"/></instanceOf>
    <resourceRef
      xlink:href="ftp://www.gutenberg.org/pub/gutenberg/etext97/1ws2610.txt"/>
  </occurrence>
  ... 
</topic>

Związek (ang. association)

<association>
  <instanceOf><topicRef xlink:href="#written-by"/></instanceOf>
  <member>
    <roleSpec><topicRef xlink:href="#author"/></roleSpec>
    <topicRef xlink:href="#shakespeare"/>
  </member>
  <member>
    <roleSpec><topicRef xlink:href="#work"/></roleSpec>
    <topicRef xlink:href="#hamlet"/>
  </member>
</association>

Scalanie (ang. merging)

Do poczytania