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