analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Sun, 08 Jun 2014 09:53:51 +0200
changeset 36 ad36a104623f
parent 29 7284f95da10e
child 39 a5020340362b
permissions -rw-r--r--
use AltInputSource instead of just systemId in canRead() and findReader()
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@12
    30
Vstupní formáty:
franta-hg@29
    31
	RegExp:
franta-hg@29
    32
		hledá v textu shodu s výrazem (typicky bude končit koncem řádku) a vrací skupiny z výrazu jako elementy
franta-hg@29
    33
	Javovské Properties:
franta-hg@29
    34
		proudové zpracování
franta-hg@29
    35
		komentáře převést na XML komentáře
franta-hg@29
    36
	INI:
franta-hg@29
    37
		sekce (případně vnořené)
franta-hg@29
    38
		klíč=hodnota
franta-hg@29
    39
	CSV:
franta-hg@29
    40
		hlavičky → elementy
franta-hg@29
    41
	HTML:
franta-hg@29
    42
		zprasené, atributy bez uvozovek, atd.
franta-hg@29
    43
		asi TagSoup parser
franta-hg@29
    44
	TXT:
franta-hg@29
    45
		co řádek, to element
franta-hg@29
    46
		číslování řádků (atribut)
franta-hg@29
    47
	ASN.1:
franta-hg@29
    48
		DER, BER…
franta-hg@29
    49
	YAML:
franta-hg@29
    50
		http://yaml.org/
franta-hg@29
    51
	JSON:
franta-hg@29
    52
		standardní struktura výstupního XML
franta-hg@29
    53
	Markdown:
franta-hg@29
    54
		https://github.com/sirthias/pegdown
franta-hg@29
    55
	Souborový systém:
franta-hg@29
    56
		adresářová struktura
franta-hg@29
    57
		atributy souborů (včetně rozšířených)
franta-hg@29
    58
		volitelně obsah souborů
franta-hg@29
    59
		zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
franta-hg@29
    60
		vhodné pro konfiguraci programů
franta-hg@29
    61
	Jednoduché XML
franta-hg@29
    62
		definované odsazením
franta-hg@29
    63
franta-hg@29
    64
Výstupní moduly:
franta-hg@29
    65
	prostá kopie XML
franta-hg@29
    66
	formátované XML: odsazení + volitelně barvy
franta-hg@29
    67
	XSD/DTD validace
franta-hg@29
    68
	XPath filtrování
franta-hg@29
    69
	XSLT
franta-hg@29
    70
	XQuery
franta-hg@29
    71
	Souborový systém (stromová struktura adresářů a souborů)
franta-hg@29
    72
	YAML, INI, JSON a další formáty
franta-hg@29
    73
franta-hg@27
    74
CLI API:
franta-hg@27
    75
	--input-file <filename>
franta-hg@27
    76
	--input-stdin <systemId>
franta-hg@27
    77
	--input-url <systemId>
franta-hg@29
    78
franta-hg@29
    79
	--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
franta-hg@29
    80
franta-hg@27
    81
	--reader-property <key> <value>
franta-hg@29
    82
franta-hg@27
    83
	--default-namespace-uri <uri>
franta-hg@27
    84
	--default-namespace-prefix <prefix>
franta-hg@29
    85
franta-hg@27
    86
	--output-file <filename>
franta-hg@29
    87
franta-hg@27
    88
	--action <pluginName>
franta-hg@29
    89
franta-hg@27
    90
	--action-property <key> <value>
franta-hg@27
    91
	--action-properties <array> (last option, opaque data follows)
franta-hg@27
    92
franta-hg@12
    93
franta-hg@29
    94
Self-documenting:
franta-hg@29
    95
	po vzoru JDBC ovladačů
franta-hg@29
    96
	jak pro vstupní XMLReadery, tak pro výstupní moduly
franta-hg@29
    97
	konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
franta-hg@29
    98
	společné/generické volby definované na jednom místě
franta-hg@29
    99
	→ vygenerovat dokumentaci + bash-completion
franta-hg@12
   100
franta-hg@12
   101
Odkazy:
franta-hg@12
   102
	TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
franta-hg@29
   103
	HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
franta-hg@12
   104
	XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
franta-hg@12
   105
	Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
franta-hg@12
   106
	SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
franta-hg@12
   107
	XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
franta-hg@12
   108
	ASN.1
franta-hg@12
   109
		http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
franta-hg@12
   110
		http://www.root.cz/clanky/analogie-asn1/
franta-hg@12
   111
		http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
franta-hg@12
   112
		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
   113
		https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)