analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Wed, 03 Sep 2014 19:48:14 +0200
changeset 59 12b4c1fc57a8
parent 54 3d5cc308e268
child 96 9ca02f0f6751
permissions -rw-r--r--
in-properties: streaming
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@29
    46
	CSV:
franta-hg@29
    47
		hlavičky → elementy
franta-hg@29
    48
	HTML:
franta-hg@29
    49
		zprasené, atributy bez uvozovek, atd.
franta-hg@29
    50
		asi TagSoup parser
franta-hg@29
    51
	TXT:
franta-hg@29
    52
		co řádek, to element
franta-hg@29
    53
		číslování řádků (atribut)
franta-hg@54
    54
	ESC:
franta-hg@54
    55
		převod escapovacích sekvencí na XHTML
franta-hg@54
    56
		barvy, tučné písmo
franta-hg@29
    57
	ASN.1:
franta-hg@29
    58
		DER, BER…
franta-hg@29
    59
	YAML:
franta-hg@29
    60
		http://yaml.org/
franta-hg@29
    61
	JSON:
franta-hg@29
    62
		standardní struktura výstupního XML
franta-hg@29
    63
	Markdown:
franta-hg@29
    64
		https://github.com/sirthias/pegdown
franta-hg@29
    65
	Souborový systém:
franta-hg@29
    66
		adresářová struktura
franta-hg@29
    67
		atributy souborů (včetně rozšířených)
franta-hg@29
    68
		volitelně obsah souborů
franta-hg@39
    69
		volitelně počítat hashe
franta-hg@29
    70
		zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
franta-hg@29
    71
		vhodné pro konfiguraci programů
franta-hg@54
    72
	XML.dir
franta-hg@54
    73
		taky souborový systém
franta-hg@54
    74
		ale ne obecný – specifická struktura
franta-hg@54
    75
		umožňuje popsat prakticky libovolné XML
franta-hg@54
    76
		adresář = element
franta-hg@54
    77
		soubor = atribut nebo textový uzel
franta-hg@54
    78
		číslování souborů/adresářů → pořadí uzlů
franta-hg@29
    79
	Jednoduché XML
franta-hg@29
    80
		definované odsazením
franta-hg@29
    81
franta-hg@29
    82
Výstupní moduly:
franta-hg@29
    83
	prostá kopie XML
franta-hg@29
    84
	formátované XML: odsazení + volitelně barvy
franta-hg@29
    85
	XSD/DTD validace
franta-hg@29
    86
	XPath filtrování
franta-hg@29
    87
	XSLT
franta-hg@29
    88
	XQuery
franta-hg@29
    89
	Souborový systém (stromová struktura adresářů a souborů)
franta-hg@29
    90
	YAML, INI, JSON a další formáty
franta-hg@29
    91
franta-hg@27
    92
CLI API:
franta-hg@27
    93
	--input-file <filename>
franta-hg@27
    94
	--input-stdin <systemId>
franta-hg@27
    95
	--input-url <systemId>
franta-hg@29
    96
franta-hg@29
    97
	--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
franta-hg@29
    98
franta-hg@27
    99
	--reader-property <key> <value>
franta-hg@29
   100
franta-hg@27
   101
	--default-namespace-uri <uri>
franta-hg@27
   102
	--default-namespace-prefix <prefix>
franta-hg@29
   103
franta-hg@27
   104
	--output-file <filename>
franta-hg@29
   105
franta-hg@27
   106
	--action <pluginName>
franta-hg@29
   107
franta-hg@39
   108
	--action-property <key> <value> (recommended way of parametrization, self-documenting)
franta-hg@39
   109
	-- <array> (last option/separator, followed by  opaque data for output module)
franta-hg@27
   110
franta-hg@12
   111
franta-hg@29
   112
Self-documenting:
franta-hg@29
   113
	po vzoru JDBC ovladačů
franta-hg@29
   114
	jak pro vstupní XMLReadery, tak pro výstupní moduly
franta-hg@29
   115
	konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
franta-hg@29
   116
	společné/generické volby definované na jednom místě
franta-hg@29
   117
	→ vygenerovat dokumentaci + bash-completion
franta-hg@12
   118
franta-hg@12
   119
Odkazy:
franta-hg@12
   120
	TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
franta-hg@29
   121
	HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
franta-hg@12
   122
	XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
franta-hg@12
   123
	Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
franta-hg@12
   124
	SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
franta-hg@12
   125
	XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
franta-hg@12
   126
	ASN.1
franta-hg@12
   127
		http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
franta-hg@12
   128
		http://www.root.cz/clanky/analogie-asn1/
franta-hg@12
   129
		http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
franta-hg@12
   130
		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
   131
		https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)