61 Set<Resource> resources =
new HashSet<>();
62 model.listStatements().toList().forEach(statement -> {
63 resources.add(statement.getSubject());
64 RDFNode
object = statement.getObject();
65 if (
object.isResource()) {
66 resources.add(
object.asResource());
69 Set<String> uriToNodeId =
new HashSet<String>();
70 Integer literalcounter = 0, edgecounter = 0;
71 Integer typecounter = 0, langcounter = 0, valcounter = 0;
72 StringWriter strwriter =
new StringWriter();
73 XMLOutputFactory factory = XMLOutputFactory.newInstance();
75 XMLStreamWriter writer =
new IndentingXMLStreamWriter(factory.createXMLStreamWriter(strwriter));
76 writer.writeStartDocument();
77 writer.writeStartElement(
"graphml");
78 writer.writeAttribute(
"xmlns",
"http://graphml.graphdrawing.org/xmlns");
79 writer.writeAttribute(
"xmlns:xsi",
"http://www.w3.org/2001/XMLSchema-instance");
80 writer.writeAttribute(
"xmlns:y",
"http://www.yworks.com/xml/graphml");
81 writer.writeAttribute(
"xmlns:schemaLocation",
82 "http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd");
83 writer.writeStartElement(
"key");
84 writer.writeAttribute(
"for",
"node");
85 writer.writeAttribute(
"id",
"nodekey");
86 writer.writeAttribute(
"yfiles.type",
"nodegraphics");
87 writer.writeEndElement();
88 writer.writeStartElement(
"key");
89 writer.writeAttribute(
"for",
"edge");
90 writer.writeAttribute(
"id",
"edgekey");
91 writer.writeAttribute(
"yfiles.type",
"edgegraphics");
92 writer.writeEndElement();
93 writer.writeStartElement(
"graph");
94 writer.writeAttribute(
"id",
"G");
95 writer.writeAttribute(
"edgedefault",
"undirected");
96 for (Resource res : resources) {
97 if (!res.isURIResource())
99 String subprefix =
null;
100 if (!uriToNodeId.contains(res.getURI())) {
101 writer.writeStartElement(
"node");
102 writer.writeAttribute(
"id", res.getURI());
103 writer.writeAttribute(
"uri", res.getURI());
104 writer.writeStartElement(
"data");
105 writer.writeAttribute(
"key",
"nodekey");
107 writer.writeStartElement(
"y:ShapeNode");
108 writer.writeStartElement(
"y:Shape");
109 writer.writeAttribute(
"shape",
"ellipse");
110 writer.writeEndElement();
111 writer.writeStartElement(
"y:Fill");
113 writer.writeAttribute(
"transparent",
"false");
114 writer.writeEndElement();
115 writer.writeStartElement(
"y:NodeLabel");
116 writer.writeAttribute(
"alignment",
"center");
117 writer.writeAttribute(
"autoSizePolicy",
"content");
118 writer.writeAttribute(
"fontSize",
"12");
119 writer.writeAttribute(
"fontStyle",
"plain");
120 writer.writeAttribute(
"hasText",
"true");
121 writer.writeAttribute(
"visible",
"true");
122 writer.writeAttribute(
"width",
"4.0");
123 subprefix = res.getModel().getNsURIPrefix(res.getNameSpace());
124 if (subprefix !=
null) {
125 writer.writeCharacters(subprefix +
":" + res.getLocalName());
127 writer.writeCharacters(res.getLocalName());
129 writer.writeEndElement();
130 writer.writeEndElement();
131 writer.writeEndElement();
132 writer.writeEndElement();
133 uriToNodeId.add(res.getURI());
135 StmtIterator propiter = res.listProperties();
136 while (propiter.hasNext()) {
137 Statement curst = propiter.next();
138 if (curst.getObject().isURIResource()) {
139 if (!uriToNodeId.contains(curst.getObject().asResource().getURI())) {
140 writer.writeStartElement(
"node");
141 writer.writeAttribute(
"id", curst.getObject().asResource().getURI());
142 writer.writeAttribute(
"value", curst.getObject().asResource().getLocalName());
143 writer.writeAttribute(
"uri", curst.getObject().asResource().getURI());
144 writer.writeStartElement(
"data");
145 writer.writeAttribute(
"key",
"nodekey");
147 writer.writeStartElement(
"y:ShapeNode");
148 writer.writeStartElement(
"y:Shape");
149 writer.writeAttribute(
"shape",
"ellipse");
150 writer.writeEndElement();
151 writer.writeStartElement(
"y:Fill");
152 writer.writeAttribute(
"color", this.
getColorForResource(model, curst.getObject().asResource(),
"#800080"));
153 writer.writeAttribute(
"transparent",
"false");
154 writer.writeEndElement();
155 writer.writeStartElement(
"y:NodeLabel");
156 writer.writeAttribute(
"alignment",
"center");
157 writer.writeAttribute(
"autoSizePolicy",
"content");
158 writer.writeAttribute(
"fontSize",
"12");
159 writer.writeAttribute(
"fontStyle",
"plain");
160 writer.writeAttribute(
"hasText",
"true");
161 writer.writeAttribute(
"visible",
"true");
162 writer.writeAttribute(
"width",
"4.0");
163 subprefix = curst.getObject().asResource().getModel()
164 .getNsURIPrefix(curst.getObject().asResource().getNameSpace());
165 if (subprefix !=
null) {
166 writer.writeCharacters(subprefix +
":" + curst.getObject().asResource().getLocalName());
168 writer.writeCharacters(curst.getObject().asResource().getLocalName());
170 writer.writeEndElement();
171 writer.writeEndElement();
172 writer.writeEndElement();
173 writer.writeEndElement();
174 uriToNodeId.add(curst.getObject().asResource().getURI());
176 writer.writeStartElement(
"edge");
177 writer.writeAttribute(
"id",
"e" + edgecounter++);
178 writer.writeAttribute(
"uri", curst.getPredicate().getURI());
179 writer.writeAttribute(
"source", curst.getSubject().getURI());
180 writer.writeAttribute(
"target", curst.getObject().asResource().getURI());
181 writer.writeStartElement(
"data");
182 writer.writeAttribute(
"key",
"edgekey");
184 writer.writeStartElement(
"y:PolyLineEdge");
185 writer.writeStartElement(
"y:EdgeLabel");
186 writer.writeAttribute(
"alignment",
"center");
187 writer.writeAttribute(
"configuration",
"AutoFlippingLabel");
188 writer.writeAttribute(
"fontSize",
"12");
189 writer.writeAttribute(
"fontStyle",
"plain");
190 writer.writeAttribute(
"hasText",
"true");
191 writer.writeAttribute(
"visible",
"true");
192 writer.writeAttribute(
"width",
"4.0");
193 subprefix = curst.getPredicate().asResource().getModel()
194 .getNsURIPrefix(curst.getPredicate().asResource().getNameSpace());
195 if (subprefix !=
null) {
196 writer.writeCharacters(subprefix +
":" + curst.getPredicate().getLocalName());
198 writer.writeCharacters(curst.getPredicate().getLocalName());
200 writer.writeEndElement();
201 writer.writeEndElement();
202 writer.writeEndElement();
203 writer.writeEndElement();
204 }
else if (curst.getObject().isLiteral()) {
205 writer.writeStartElement(
"node");
206 writer.writeAttribute(
"id",
"literal" + literalcounter);
207 if (!curst.getObject().asLiteral().getValue().toString().isEmpty()) {
208 writer.writeStartElement(
"data");
209 writer.writeAttribute(
"key",
"nodekey");
210 writer.writeStartElement(
"y:ShapeNode");
211 writer.writeStartElement(
"y:Shape");
212 writer.writeAttribute(
"shape",
"ellipse");
213 writer.writeEndElement();
214 writer.writeStartElement(
"y:Fill");
215 if (curst.getPredicate().getURI() !=
null && curst.getPredicate().getURI()
216 .startsWith(
"http://www.w3.org/2000/01/rdf-schema#")) {
217 writer.writeAttribute(
"color",
"#F08080");
219 writer.writeAttribute(
"color",
"#008000");
221 writer.writeAttribute(
"transparent",
"false");
222 writer.writeEndElement();
223 writer.writeStartElement(
"y:NodeLabel");
224 writer.writeAttribute(
"alignment",
"center");
225 writer.writeAttribute(
"autoSizePolicy",
"content");
226 writer.writeAttribute(
"fontSize",
"12");
227 writer.writeAttribute(
"fontStyle",
"plain");
228 writer.writeAttribute(
"hasText",
"true");
229 writer.writeAttribute(
"visible",
"true");
230 writer.writeAttribute(
"width",
"4.0");
231 writer.writeCharacters(curst.getObject().asLiteral().getValue().toString() +
" (xsd:"
232 + curst.getObject().asLiteral().getDatatype().getURI().substring(
233 curst.getObject().asLiteral().getDatatype().getURI().lastIndexOf(
'#') + 1)
235 writer.writeEndElement();
236 writer.writeEndElement();
237 writer.writeEndElement();
240 writer.writeStartElement(
"data");
241 writer.writeAttribute(
"key",
"type" + typecounter);
243 writer.writeCharacters(curst.getObject().asLiteral().getDatatypeURI());
244 writer.writeEndElement();
245 if (curst.getObject().asLiteral().getLanguage() !=
null && !curst.getObject().asLiteral().getLanguage().isEmpty()) {
246 writer.writeStartElement(
"data");
247 writer.writeAttribute(
"key",
"lang" + langcounter);
249 writer.writeCharacters(curst.getObject().asLiteral().getLanguage());
250 writer.writeEndElement();
252 writer.writeEndElement();
253 writer.writeStartElement(
"edge");
254 writer.writeAttribute(
"id",
"e" + edgecounter++);
255 writer.writeAttribute(
"uri", curst.getPredicate().getURI());
256 writer.writeAttribute(
"source", curst.getSubject().getURI());
257 writer.writeAttribute(
"target",
"literal" + literalcounter);
258 writer.writeStartElement(
"data");
259 writer.writeAttribute(
"key",
"edgekey");
261 writer.writeStartElement(
"y:PolyLineEdge");
262 writer.writeStartElement(
"y:EdgeLabel");
263 writer.writeAttribute(
"alignment",
"center");
264 writer.writeAttribute(
"configuration",
"AutoFlippingLabel");
265 writer.writeAttribute(
"fontSize",
"12");
266 writer.writeAttribute(
"fontStyle",
"plain");
267 writer.writeAttribute(
"hasText",
"true");
268 writer.writeAttribute(
"visible",
"true");
269 writer.writeAttribute(
"width",
"4.0");
270 subprefix = curst.getPredicate().asResource().getModel()
271 .getNsURIPrefix(curst.getPredicate().asResource().getNameSpace());
272 if (subprefix !=
null) {
273 writer.writeCharacters(subprefix +
":" + curst.getPredicate().getLocalName());
275 writer.writeCharacters(curst.getPredicate().getLocalName());
277 writer.writeEndElement();
278 writer.writeEndElement();
279 writer.writeEndElement();
280 writer.writeEndElement();
285 writer.writeEndElement();
286 writer.writeEndElement();
287 writer.writeEndDocument();
290 }
catch (Exception e) {
293 response.getWriter().write(strwriter.toString());
294 response.getWriter().close();
String getColorForResource(Model model, Resource res, String defaultColor)
Definition: GraphMLWriter.java:30