Virtlab:Validace XML
Z VirtlabWiki
(Rozdíly mezi verzemi)
| Verze z 14:50, 18. 10. 2007 Vav166 (Diskuse | příspěvky) ← Předchozí porovnání |
Verze z 06:08, 9. 9. 2008 Bam015 (Diskuse | příspěvky) (→Ukázka (taskupload.rng)) Následující porovnání → |
||
| Řádka 51: | Řádka 51: | ||
| </element> | </element> | ||
| - | <!-- Popis skupiny - group_descrip --> | + | |
| - | <element name="group_descrip"> | + | <!-- Popis zadani --> |
| - | <ref name="attlist.all_groups" /> | + | <element name="specification"> |
| - | + | ||
| <zeroOrMore> | <zeroOrMore> | ||
| - | |||
| <ref name="file" /> | <ref name="file" /> | ||
| - | |||
| </zeroOrMore> | </zeroOrMore> | ||
| + | </element> | ||
| - | </element> | + | <!-- Popis obrazku --> |
| + | <element name="picture"> | ||
| + | <optional> | ||
| + | <ref name="file" /> | ||
| + | </optional> | ||
| + | </element> | ||
| - | <!-- Popis skupiny - group_pics --> | + | <!-- Popis preconf --> |
| - | <element name="group_pics"> | + | <element name="pre_conf"> |
| - | <ref name="attlist.all_groups" /> | + | <optional> |
| - | <zeroOrMore> | + | <ref name="file" /> |
| - | + | </optional> | |
| - | <ref name="file" /> | + | |
| - | + | ||
| - | </zeroOrMore> | + | |
| - | + | ||
| </element> | </element> | ||
| - | |||
| - | <!-- Popis skupiny - group_preconf --> | ||
| - | <element name="group_preconf"> | ||
| - | <ref name="attlist.all_groups" /> | ||
| - | <zeroOrMore> | ||
| - | <ref name="file" /> | + | <!-- Popis postconf --> |
| + | <element name="post_conf"> | ||
| + | <optional> | ||
| + | <ref name="file" /> | ||
| + | </optional> | ||
| + | </element> | ||
| + | |||
| + | <!-- Popis topology --> | ||
| + | <element name="topology"> | ||
| + | <optional> | ||
| + | <ref name="file" /> | ||
| + | </optional> | ||
| + | </element> | ||
| - | </zeroOrMore> | + | <!-- Popis dia obrazku --> |
| - | + | <element name="dia_picture"> | |
| - | </element> | + | <optional> |
| - | + | <ref name="file" /> | |
| - | <!-- Popis skupiny - group_postconf --> | + | </optional> |
| - | <element name="group_postconf"> | + | </element> |
| - | <ref name="attlist.all_groups" /> | + | |
| - | <zeroOrMore> | + | |
| - | + | ||
| - | <ref name="file" /> | + | |
| - | + | ||
| - | </zeroOrMore> | + | |
| - | + | ||
| - | </element> | + | |
| - | + | ||
| - | <!-- Popis skupiny - group_topology --> | + | |
| - | <element name="group_topology"> | + | |
| - | <ref name="attlist.all_groups" /> | + | |
| - | <zeroOrMore> | + | |
| - | + | ||
| - | <ref name="file" /> | + | |
| - | + | ||
| - | </zeroOrMore> | + | |
| - | + | ||
| - | </element> | + | |
| Řádka 112: | Řádka 99: | ||
| </start> | </start> | ||
| <!-- konec hlavni casti --> | <!-- konec hlavni casti --> | ||
| + | |||
| <!-- nasleduje definice pouzitych elementu a atributu --> | <!-- nasleduje definice pouzitych elementu a atributu --> | ||
| Řádka 124: | Řádka 112: | ||
| </data> | </data> | ||
| </attribute> | </attribute> | ||
| + | <optional> | ||
| + | <attribute name="lang"> | ||
| + | <data type="string"> | ||
| + | <param name="minLength">1</param> | ||
| + | <param name="maxLength">5</param> | ||
| + | </data> | ||
| + | </attribute> | ||
| + | </optional> | ||
| <attribute name="filepath"> | <attribute name="filepath"> | ||
| <data type="string"> | <data type="string"> | ||
| Řádka 139: | Řádka 135: | ||
| </define> | </define> | ||
| - | <!-- Definice elementu "attlist.all_groups". Na definici se odkazuji pomoci 'ref name="attlist.all_groups"' | ||
| - | slouzi pro vsechny "groups" --> | ||
| - | <define name="attlist.all_groups" combine="interleave"> | ||
| - | |||
| - | <attribute name="name"> | ||
| - | <data type="string"> | ||
| - | <param name="minLength">1</param> | ||
| - | <param name="maxLength">100</param> | ||
| - | </data> | ||
| - | </attribute> | ||
| - | |||
| - | <attribute name="exists"> | ||
| - | |||
| - | <choice> | ||
| - | |||
| - | <value>yes</value> | ||
| - | |||
| - | <value>no</value> | ||
| - | |||
| - | </choice> | ||
| - | |||
| - | </attribute> | ||
| - | |||
| - | </define> | ||
| - | |||
| <!-- konec RELAX NG schematu --> | <!-- konec RELAX NG schematu --> | ||
| </grammar> | </grammar> | ||
| + | |||
| </pre> | </pre> | ||
| [[Kategorie:XML]] | [[Kategorie:XML]] | ||
Verze z 06:08, 9. 9. 2008
V prvních verzích Virtlabu jsme validovali XML pomocí DTD, nicméně tento způsob má velké limity, proto jsme přešli na validaci pomocí Relax-ng (jde o variantu XMLSchema).
Soubory relax-ng používané pro validaci jsou uloženy v SVN
- DISTR/xml/RELAXNG/ ... což je symbolický odkaz do DISTR/web/relax
- SVN
Ukázka (taskupload.rng)
<?xml version="1.0" encoding="UTF-8"?>
<!-- RELAX NG schema pro popis ulohy -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:html="http://www.w3.org/1999/xhtml"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<!-- zacatek -->
<element name="task">
<!-- atribut "name" -->
<attribute name="name">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">35</param>
</data>
</attribute>
<!-- nepovinny atribut "time" -->
<optional>
<attribute name="time">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxExclusive">10000000</param>
</data>
</attribute>
</optional>
<!-- Element popisující jméno v dlouhém formátu -->
<element name="longname">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">150</param>
</data>
</element>
<!-- Element pro popis -->
<element name="description">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">250</param>
</data>
</element>
<!-- Popis zadani -->
<element name="specification">
<zeroOrMore>
<ref name="file" />
</zeroOrMore>
</element>
<!-- Popis obrazku -->
<element name="picture">
<optional>
<ref name="file" />
</optional>
</element>
<!-- Popis preconf -->
<element name="pre_conf">
<optional>
<ref name="file" />
</optional>
</element>
<!-- Popis postconf -->
<element name="post_conf">
<optional>
<ref name="file" />
</optional>
</element>
<!-- Popis topology -->
<element name="topology">
<optional>
<ref name="file" />
</optional>
</element>
<!-- Popis dia obrazku -->
<element name="dia_picture">
<optional>
<ref name="file" />
</optional>
</element>
</element>
</start>
<!-- konec hlavni casti -->
<!-- nasleduje definice pouzitych elementu a atributu -->
<!-- Definice elementu "file". Na definici se odkazuji pomoci 'ref name="file"' -->
<define name="file">
<element name="file">
<attribute name="name">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">49</param>
</data>
</attribute>
<optional>
<attribute name="lang">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">5</param>
</data>
</attribute>
</optional>
<attribute name="filepath">
<data type="string">
<param name="minLength">1</param>
<param name="maxLength">299</param>
</data>
</attribute>
<attribute name="exists">
<choice>
<value>yes</value>
<value>no</value>
</choice>
</attribute>
</element>
</define>
<!-- konec RELAX NG schematu -->
</grammar>
