1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.potential.parsers;
39
40 import java.io.File;
41 import java.io.IOException;
42 import javax.xml.parsers.DocumentBuilder;
43 import javax.xml.parsers.DocumentBuilderFactory;
44 import javax.xml.parsers.ParserConfigurationException;
45 import org.w3c.dom.Document;
46 import org.w3c.dom.NodeList;
47 import org.xml.sax.ErrorHandler;
48 import org.xml.sax.SAXException;
49 import org.xml.sax.SAXParseException;
50
51
52
53
54
55
56 public class PDBMLFilter implements ErrorHandler {
57
58 private static final String JAXP_SCHEMA_LANGUAGE =
59 "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
60 private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
61 private static final String JAXP_SCHEMA_SOURCE =
62 "http://java.sun.com/xml/jaxp/properties/schemaSource";
63 private static final String PDBX_XSD = "pdbx.xsd";
64 private File pdbxFile = null;
65
66
67 public PDBMLFilter() {}
68
69
70
71
72
73
74 public static void main(String[] args) {
75 if (args.length != 1) {
76 System.out.println("Usage: java PDBXFilter name.xml");
77 }
78 PDBMLFilter pdbx = new PDBMLFilter();
79 File pdbxFile = new File(args[0]);
80 pdbx.parse(pdbxFile);
81 }
82
83
84 @Override
85 public void error(SAXParseException e) throws SAXException {
86 parseMessage(e);
87 }
88
89
90 @Override
91 public void fatalError(SAXParseException e) throws SAXException {
92 parseMessage(e);
93 }
94
95
96
97
98
99
100 public void parseMessage(Exception e) {
101 System.out.println("Could not parse: " + pdbxFile + "\n" + e);
102 }
103
104
105 @Override
106 public void warning(SAXParseException e) throws SAXException {
107 parseMessage(e);
108 }
109
110 private void parse(File pdbxml) {
111 pdbxFile = pdbxml;
112 try {
113 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
114 dbf.setNamespaceAware(true);
115 dbf.setValidating(true);
116 dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
117 dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(PDBX_XSD));
118 DocumentBuilder db = dbf.newDocumentBuilder();
119 db.setErrorHandler(this);
120 Document doc = db.parse(pdbxFile);
121 NodeList list = doc.getElementsByTagName("PDBx:atom_site");
122 System.out.println("Number of Atoms: " + list.getLength());
123 } catch (ParserConfigurationException
124 | IllegalArgumentException
125 | SAXException
126 | IOException e) {
127 parseMessage(e);
128 }
129 }
130 }