franta-hg@29
|
1 |
Slouží k načítání souborů ve všelijakých syntaxích (json, ini atd.) tak,
|
franta-hg@2
|
2 |
aby s nimi následně šlo pracovat jako s XML.
|
franta-hg@2
|
3 |
|
franta-hg@2
|
4 |
SAXParserFactory → SAXParser → XMLReader
|
franta-hg@2
|
5 |
|
franta-hg@2
|
6 |
Nejdůležitější je XMLReader, tam se provádí vlastní načítání exotického souboru.
|
franta-hg@2
|
7 |
|
franta-hg@2
|
8 |
Aby se použila správná (naše) továrna, je potřeba udělat něco z následujícího:
|
franta-hg@2
|
9 |
– nastavit systémovou vlastnost „javax.xml.parsers.SAXParserFactory“
|
franta-hg@2
|
10 |
– použít Services API… viz JavaDoc k newInstance()
|
franta-hg@2
|
11 |
– předat název třídy továrny jako parametr newInstance(…, …);
|
franta-hg@2
|
12 |
|
franta-hg@2
|
13 |
Pak načítáme soubory, jako by to bylo XML:
|
franta-hg@2
|
14 |
SAXParserFactory továrna = SAXParserFactory.newInstance();
|
franta-hg@2
|
15 |
SAXParser parser = továrna.newSAXParser();
|
franta-hg@2
|
16 |
parser.parse(new File("data/vstup.json"), h);
|
franta-hg@29
|
17 |
|
franta-hg@29
|
18 |
Nikde sice nejsou žádné ostré závorky (např. JSON používá {} a []),
|
franta-hg@2
|
19 |
ale používáme stejné API a všechny navazující nástroje jako u opravdového XML.
|
franta-hg@2
|
20 |
|
franta-hg@2
|
21 |
Náš SAXParser používá SuperXMLReader, který rozhoduje, který konkrétní parser se použije.
|
franta-hg@2
|
22 |
|
franta-hg@12
|
23 |
|
franta-hg@12
|
24 |
Moduly řešit přes Features?
|
franta-hg@12
|
25 |
|
franta-hg@29
|
26 |
Kódování pro převod všech znaků na název XML elementu/atributu
|
franta-hg@29
|
27 |
|
franta-hg@29
|
28 |
Možnost zakódovat properties XMLReaderu a skutečné SystemId do URI SystemId.
|
franta-hg@29
|
29 |
|
franta-hg@39
|
30 |
Komentáře přes LexicalHandler
|
franta-hg@39
|
31 |
To set the LexicalHandler for an XML reader, use the setProperty method
|
franta-hg@39
|
32 |
with the property name http://xml.org/sax/properties/lexical-handler
|
franta-hg@39
|
33 |
and an object implementing this interface (or null) as the value.
|
franta-hg@39
|
34 |
If the reader does not report lexical events, it will throw
|
franta-hg@39
|
35 |
a SAXNotRecognizedException when you attempt to register the handler.
|
franta-hg@39
|
36 |
|
franta-hg@12
|
37 |
Vstupní formáty:
|
franta-hg@29
|
38 |
RegExp:
|
franta-hg@29
|
39 |
hledá v textu shodu s výrazem (typicky bude končit koncem řádku) a vrací skupiny z výrazu jako elementy
|
franta-hg@29
|
40 |
Javovské Properties:
|
franta-hg@29
|
41 |
proudové zpracování
|
franta-hg@29
|
42 |
komentáře převést na XML komentáře
|
franta-hg@29
|
43 |
INI:
|
franta-hg@29
|
44 |
sekce (případně vnořené)
|
franta-hg@29
|
45 |
klíč=hodnota
|
franta-hg@96
|
46 |
zdroje:
|
franta-hg@96
|
47 |
https://en.wikipedia.org/wiki/INI_file
|
franta-hg@96
|
48 |
https://developer.gnome.org/desktop-entry-spec/
|
franta-hg@96
|
49 |
http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s02.html
|
franta-hg@29
|
50 |
CSV:
|
franta-hg@29
|
51 |
hlavičky → elementy
|
franta-hg@29
|
52 |
HTML:
|
franta-hg@29
|
53 |
zprasené, atributy bez uvozovek, atd.
|
franta-hg@29
|
54 |
asi TagSoup parser
|
franta-hg@29
|
55 |
TXT:
|
franta-hg@29
|
56 |
co řádek, to element
|
franta-hg@29
|
57 |
číslování řádků (atribut)
|
franta-hg@54
|
58 |
ESC:
|
franta-hg@54
|
59 |
převod escapovacích sekvencí na XHTML
|
franta-hg@54
|
60 |
barvy, tučné písmo
|
franta-hg@29
|
61 |
ASN.1:
|
franta-hg@29
|
62 |
DER, BER…
|
franta-hg@29
|
63 |
YAML:
|
franta-hg@29
|
64 |
http://yaml.org/
|
franta-hg@29
|
65 |
JSON:
|
franta-hg@29
|
66 |
standardní struktura výstupního XML
|
franta-hg@29
|
67 |
Markdown:
|
franta-hg@29
|
68 |
https://github.com/sirthias/pegdown
|
franta-hg@29
|
69 |
Souborový systém:
|
franta-hg@29
|
70 |
adresářová struktura
|
franta-hg@29
|
71 |
atributy souborů (včetně rozšířených)
|
franta-hg@29
|
72 |
volitelně obsah souborů
|
franta-hg@39
|
73 |
volitelně počítat hashe
|
franta-hg@29
|
74 |
zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
|
franta-hg@29
|
75 |
vhodné pro konfiguraci programů
|
franta-hg@54
|
76 |
XML.dir
|
franta-hg@54
|
77 |
taky souborový systém
|
franta-hg@54
|
78 |
ale ne obecný – specifická struktura
|
franta-hg@54
|
79 |
umožňuje popsat prakticky libovolné XML
|
franta-hg@54
|
80 |
adresář = element
|
franta-hg@54
|
81 |
soubor = atribut nebo textový uzel
|
franta-hg@54
|
82 |
číslování souborů/adresářů → pořadí uzlů
|
franta-hg@29
|
83 |
Jednoduché XML
|
franta-hg@29
|
84 |
definované odsazením
|
franta-hg@29
|
85 |
|
franta-hg@29
|
86 |
Výstupní moduly:
|
franta-hg@29
|
87 |
prostá kopie XML
|
franta-hg@29
|
88 |
formátované XML: odsazení + volitelně barvy
|
franta-hg@29
|
89 |
XSD/DTD validace
|
franta-hg@29
|
90 |
XPath filtrování
|
franta-hg@29
|
91 |
XSLT
|
franta-hg@29
|
92 |
XQuery
|
franta-hg@29
|
93 |
Souborový systém (stromová struktura adresářů a souborů)
|
franta-hg@29
|
94 |
YAML, INI, JSON a další formáty
|
franta-hg@29
|
95 |
|
franta-hg@27
|
96 |
CLI API:
|
franta-hg@27
|
97 |
--input-file <filename>
|
franta-hg@27
|
98 |
--input-stdin <systemId>
|
franta-hg@27
|
99 |
--input-url <systemId>
|
franta-hg@29
|
100 |
|
franta-hg@29
|
101 |
--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
|
franta-hg@29
|
102 |
|
franta-hg@27
|
103 |
--reader-property <key> <value>
|
franta-hg@29
|
104 |
|
franta-hg@27
|
105 |
--default-namespace-uri <uri>
|
franta-hg@27
|
106 |
--default-namespace-prefix <prefix>
|
franta-hg@29
|
107 |
|
franta-hg@27
|
108 |
--output-file <filename>
|
franta-hg@29
|
109 |
|
franta-hg@27
|
110 |
--action <pluginName>
|
franta-hg@29
|
111 |
|
franta-hg@39
|
112 |
--action-property <key> <value> (recommended way of parametrization, self-documenting)
|
franta-hg@39
|
113 |
-- <array> (last option/separator, followed by opaque data for output module)
|
franta-hg@27
|
114 |
|
franta-hg@12
|
115 |
|
franta-hg@29
|
116 |
Self-documenting:
|
franta-hg@29
|
117 |
po vzoru JDBC ovladačů
|
franta-hg@29
|
118 |
jak pro vstupní XMLReadery, tak pro výstupní moduly
|
franta-hg@29
|
119 |
konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
|
franta-hg@29
|
120 |
společné/generické volby definované na jednom místě
|
franta-hg@29
|
121 |
→ vygenerovat dokumentaci + bash-completion
|
franta-hg@12
|
122 |
|
franta-hg@12
|
123 |
Odkazy:
|
franta-hg@12
|
124 |
TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
|
franta-hg@29
|
125 |
HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
|
franta-hg@12
|
126 |
XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
|
franta-hg@12
|
127 |
Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
|
franta-hg@12
|
128 |
SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
|
franta-hg@12
|
129 |
XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
|
franta-hg@12
|
130 |
ASN.1
|
franta-hg@12
|
131 |
http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
|
franta-hg@12
|
132 |
http://www.root.cz/clanky/analogie-asn1/
|
franta-hg@12
|
133 |
http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
|
franta-hg@12
|
134 |
http://www.bouncycastle.org/ – Pěkná knihovna pro práci s ASN.1 v Javě je součástí Bouncy Castle Crypto APIs
|
franta-hg@12
|
135 |
https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)
|