Схема для открытого XML - PullRequest
       3

Схема для открытого XML

1 голос
/ 01 сентября 2010

Я реализую веб-сервис 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»?

1 Ответ

2 голосов
/ 02 сентября 2010

Да, просто используйте any:

<xs:element name="customProperty">
    <xs:complexType>
        <xs:sequence>
            <xs:any namespace="##any"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...