Создание схемы XSD - PullRequest
       13

Создание схемы XSD

2 голосов
/ 10 марта 2010

У меня есть тег XML:

<ROW field1="value 1"  field2="value 2" ...  />

fieldi имеет строковое значение, а количество атрибутов fieldi является переменным, но не менее 1. Можно ли создать схему xsd для этого тега?

возможный XML-документ

<ROWDATA>
  <ROW field1="dfgdf" field2="ddfg"></ROW>
  <ROW field1="dfedf" field2="djkfg" field3="cdffd"></ROW>
  <ROW field1="dfedf" field2="djkfg" field3="cdffd" field4="dfedf" field5="djkfg" field6="cdffd"></ROW>
</ROWDATA> 

в этом XML-документе, который я получаю от веб-сервера, может быть поле переменного числа атрибутов (я отметил их как fieldi, где я имею в виду порядок определенного поля атрибута) Итак, у меня есть неизвестное количество элементов ROW и неизвестное количество атрибутов поля в элементе ROW

Спасибо

Ответы [ 4 ]

2 голосов
/ 10 марта 2010

Если вы используете Visual Studio 2008:

  • Откройте файл Xml в Visual Studio
  • Перейти к пункту меню «Xml» в верхней части экрана.
  • Выберите «Создать схему»

Это сгенерирует вашу схему (ы) xsd

EDIT Попробуйте этот пример для получения подробной информации об установке minOccurs (для элементов) или обязательных (для атрибутов), чтобы вы могли манипулировать производной схемой.

0 голосов
/ 12 марта 2010

Я решил проблему, но другим способом, управляя десериализацией XML-документа так, как мне нужно. Однако мне не нравится это решение, потому что я хотел создать классы из схемы xsd и использовать их в своем коде.

В любом случае, спасибо всем

0 голосов
/ 11 марта 2010

Я думаю, что понял ваше требование.Просто чтобы избежать заблуждений, позвольте мне раскрыть то, что я однажды понял:
"У вас есть XML-файл, который содержит элемент с именем fieldi, поставляется с набором некоторых неизвестных атрибутов. Это означает, что вы не знаете [или, скажем, не хочу] имена и значения этих атрибутов. Просто хочу посмотреть, появляется хотя бы 1 атрибут ",

Хорошо.К сожалению, это требование исчерпывает возможности XML-схемы.: - [

Вы не можете иметь необъявленные атрибуты в схеме.Если он появляется в xml, для него требуется правильное определение.Существует нечто, называемое <anyAttribute/> [click-here] , которое снова требует определения [где-то в другой связанной схеме].

1) Определение всех возможных атрибутов, создающих use="optional", нене выглядит практически возможным.А также ваше последнее требование будет пропущено.
2) Если это возможно, преобразуйте все атрибуты в элементы [используя преобразование, или вы можете либо попросить отправителя сделать это, я не знаю, насколько это сложно вваш случай], и определите элемент <any/>, который звучит несколько комфортно.но ваше требование [хотя бы один атрибут должен появиться] все еще не выполнено.

, так что это я могу добавить вам.Если вы можете изменить требования или структуру ввода XML, тогда дайте мне знать, я посмотрю, смогу ли я чем-нибудь вам помочь.

С уважением,
infant-pro

0 голосов
/ 10 марта 2010

Если вам неудобно писать XSD самостоятельно, используйте какой-нибудь генератор, например this .

РЕДАКТИРОВАТЬ: На основе вашего XML в комментариях, я могу думать о структуре ниже XSD

<xsd:element name="FieldHeader">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element name="Fields" type="xsd:string"/> <!--use minOccurs  maxOccurs here-->
          </xsd:sequence>
     </xsd:complexType>
 </xsd:element>
<xsd:simpleType name="fieldi">  
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="Fields"> 
    <xsd:list itemType="fieldi" />
</xsd:simpleType>
...