2009-07-22 3 views
0

Редактировать: Я не думаю, что я задал этот вопрос очень хорошо. Я полностью заново формулируя егоСложные типы и XSD

Все: Я пытаюсь представить следующий XML в XSD (я работаю с визуальным редактором студии XSD, как я действительно не знаю XSD очень хорошо).

 
Here's the XML: 

<TheParentNode> 
    <AnElement ID="x">123</AnElement> 
</TheParentNode> 
 

Я хочу указать, что значение AnElement должно быть числом. Я также хочу добавить некоторые атрибуты в AnElement.

Каким должен быть XSD?

В дизайнере Visual Studio я вижу, как сделать AnElement сложным типом, и это единственный способ определить для него атрибуты. Однако, если я это сделаю, я не вижу способа указать, что значение AnElement должно быть числом.

Нужно ли использовать сложные типы? Как выглядел бы ваш XSD-код?

ответ

2

Вы должны определить complexType с simpleContent:

<xs:element name="AnElement"> 
     <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:int"> 
      <xs:attribute name="ID" type="xs:string" /> 
      </xs:extension> 
     </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 

Это должно сделать трюк. И я боюсь, что это единственный способ добиться этого. Неужели это так плохо?

UPDATE:
После вашего обновления это XSD вам необходимо:

<xs:schema id="TheParentNode" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="TheParentNode"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="AnElement"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:int"> 
       <xs:attribute name="ID" type="xs:string" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Вы знаете, я надеюсь, что если у вас есть файл XML, открытый в Visual Studio, вы можете пойти в меню «XML» и выберите «Создать схему» из него? Это дает вам хороший старт, как правило, для ваших файлов XSD.

Марк

+0

Неплохо, просто пытаюсь понять это - я довольно новичок в XSD. – JMarsch

+0

Еще раз спасибо за ваши обновления. Я знал о поддержке xsd в Visual Studio (и на самом деле я начал работу с xsd с обратным преобразованием (сгенерированный XSD из xml). Нам просто нужно изменить некоторые вещи, которые не были записаны в обратную инженерию. – JMarsch

-1

Как о попытке установить опцию ограничения с регулярным значением экспресс? restriction and pattern xsd tags

<xs:element name="AnElement"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

Это означает, что только позволяет иметь целые числа как ноль или более цифр.

Надеюсь, это поможет.

Tiger.

+0

Я бы не использовал что-то что у вас уже есть xs: int базовый тип в XSD. Почему бы просто не определить ограничение на основе xs: int? Имеет для меня больше смысла. –

+0

@Tiger: зачем проходить все это? -1. –

+0

John Я вижу, но, я пытался помочь, я не видел, где не так, я мог бы дать неправильное направление для этого вопроса. Я буду признателен, если вы можете мне помочь. Спасибо. – Tiger