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