Схемы XML (XSD> - Может ли непустой элемент иметь тип и атрибут? - PullRequest
0 голосов
/ 22 ноября 2011

Я относительно новичок в XML-схемах и столкнулся с проблемой. Я знаю, что для элемента, с которым связан атрибут, это должен быть сложный тип. Однако я могу только выяснить, как связать атрибут с пустым элементом (см. Пример 1) ... возможно ли связать атрибут с непустым elemnet и иметь тип, объявленный для этого элемента (см. Пример 2)? Я использую Visual Studio 2008 для написания схем ... когда я объявляю элемент как сложный тип, он говорит мне, что мне нужно удалить объявление типа из элемента - см. Ниже.

Пример 1:

<phone units = "grams" />

Пример 2:

<phone units = "grams">92</phone>

Phone.XML

<?xml version="1.0" encoding="utf-8"?>
<phone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:noNamespaceSchemaLocation="XSD.xsd">
<make>Nokia</make>
<model>N700</model>
<code>532/4329</code>
<weight units ="grams">92</weight>
<price>49.99</price>
</phone>

XSD.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:attribute name ="units" type ="xs:string" />

<xs:element name ="phone">
<xs:complexType>
  <xs:sequence>
    <xs:element name ="make" type="xs:string" />
    <xs:element name ="model" type="xs:string" />
    <xs:element name ="code" type="xs:string" />
    <xs:element name ="weight" type="xs:string">
      <xs:complexType>
        <xs:attribute name="units" type="xs:string" />
      </xs:complexType>
    </xs:element>
    <xs:element name ="price" type="xs:double" />
  </xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

Мне еще предстоит найти пример в сети, демонстрирующий это. Возможно ли это, или я должен пожертвовать типом, связанным с элементом взвешивания, чтобы вставить атрибут?

Любая помощь будет высоко ценится .... Спасибо ....

1 Ответ

2 голосов
/ 22 ноября 2011

Сделайте что-то вроде этого:

<xs:element name="weight" type="weightType">
</xs:element> 

<xs:complexType name="weightType">
    <xs:simpleContent>
        <xs:extension base="xs:integer">
            <xs:attribute name="units" type="xs:string"/> 
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...