analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Wed, 29 Oct 2014 02:03:14 +0100
changeset 106 02739f60b1ec
parent 96 9ca02f0f6751
permissions -rw-r--r--
in-fs: permissions and extended attributes
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)