| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE html> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en"> |
| <head> |
| <title>XMLTools</title> |
| <meta charset="UTF-8"/> |
| <link rel="stylesheet" type="text/css" href="../../book.css"/> |
| </head> |
| <body> |
| <!-- |
| Content below this point is copied in "/asf-staging/book/en/developer-guide.html" file |
| by the `org.apache.sis.buildtools.book` class in `buildSrc`. |
| --> |
| <section> |
| <header> |
| <h3 id="XMLTools">Tools for reading and writing <abbr>XML</abbr> documents</h3> |
| </header> |
| <p> |
| Apache <abbr>SIS</abbr> uses different libraries to read and write different types of objects. |
| The library used depends on the complexity of the object and on performance constraints. |
| For example, <abbr title="Java Architecture for XML Binding">JAXB</abbr> annotations have the advantage of being close to code, |
| which makes it easier to maintain mapping between Java and <abbr>XML</abbr>. |
| On the other hand, <abbr title="Simple API for XML">SAX</abbr> is more efficient. |
| In general, Apache <abbr>SIS</abbr> uses: |
| </p> |
| <ul class="verbose"> |
| <li> |
| <abbr>JAXB</abbr> for objects that do not occur very often in <abbr>XML</abbr> documents, but with complex structures and deep hierarchies. |
| The metadata set in <abbr>ISO</abbr> 19115-3 standard is a typical example |
| </li> |
| <li> |
| <abbr>SAX</abbr> for objects that are relatively simple, but which may exist in very large numbers. |
| The set of points in a geometry is a typical example. |
| </li> |
| <li> |
| <abbr title="Document Object Model">DOM</abbr> as an alternative to <abbr>JAXB</abbr> |
| when the <abbr>XML</abbr> elements do not correspond exactly to Java attributes. |
| <i>Features</i> are an example, as their structure is dynamic. |
| </li> |
| </ul> |
| |
| <h4 id="XML-SIS">Implementation strategy in Apache <abbr>SIS</abbr></h4> |
| <p> |
| <code>org.apache.sis.internal.jaxb.*</code> packages (non-public) define <abbr>JAXB</abbr> adaptors for all types of <abbr>ISO</abbr> objects. |
| These adaptors are required anyway to allow <abbr>JAXB</abbr> to get <abbr>SIS</abbr> classes while implementing GeoAPI interfaces. |
| Conveniently, <abbr>SIS</abbr> made both <abbr>JAXB</abbr> adaptors and objects wrapping the “real” object to be read or written. |
| This double usage avoids having to double the number of classes (already quite high) present in the internal packages. |
| </p> |
| <h4>Naming conventions in <abbr>XSD</abbr> schemas</h4> |
| <p> |
| For each element of the first group listed above, the <abbr>XSD</abbr> schemas of the <abbr>OGC</abbr> |
| define a type whose name ends with “<code class="OGC">_PropertyType</code>”. |
| For the second group, each element has a type whose name ends with “<code class="OGC">_Type</code>”. |
| The “<code class="OGC">_PropertyType</code>” elements may have a group of attributes |
| (such as <code>gco:uuidref</code> and <code>xlink:href</code>) |
| which the <abbr>XSD</abbr> schemas collectively name <code>gco:ObjectIdentification</code>. |
| These attributes do not have dedicated Java methods, but are accessible indirectly via the |
| <code class="SIS">IdentifiedObject</code> interface described in the following subsection. |
| </p> |
| </section> |
| </body> |
| </html> |