Я реализую веб-сервис RESTful, который в настоящее время обрабатывает JSON и должен обрабатывать XML. Я использую Джексона, чтобы автоматически маршалировать объекты Java в JSON и из него. Для XML мне нужно определить схему, главным образом потому, что клиент хочет ее. Если повезет, я могу передать схему JAXB, и мне не придется самому кодировать XML-код.
Одна особенность заключается в том, что клиент может устанавливать «пользовательские свойства» для объекта. Они хранятся, но не интерпретируются сервером; они для удобства клиентской программы. Пример в формате JSON:
{"id":"abcde",
"customProperties":{
"foo":"bar", "rating":5,
"ridiculousExample":{"food":["green eggs","ham"],
"innerObject":{"name":"Bill","age":47}}
}
}
Предположительно в XML это будет выглядеть так:
<whatever>
<id>abcde</id>
<customProperties>
<customProperty>
<foo>bar</foo>
</customProperty>
<customProperty>
<rating>5</rating>
</customProperty>
<customProperty>
<ridiculousExample>
<food>
<foodItem>green eggs</foodItem>
<foodItem>ham</foodItem>
<food>
<innerObject>
<name>Bill</name>
<age>47</age>
</innerObject>
</ridiculousExample>
</customProperty>
</customProperties>
</whatever>
Внутренне (в Java) массив JSON - это просто массив, а объект JSON - это HashMap. Мы можем генерировать XML из массивов хэш-карт массивов, следуя правилам, что позволяет нам переводить эти пользовательские свойства между XML и JSON.
Есть ли какой-либо способ в XML-схеме указать что-либо до определенной точки и сказать: «С этого момента он является открытым, пока он действителен в XML»?