XSD: разница между элементом и атрибутом - PullRequest
14 голосов
/ 13 ноября 2009

Я новичок в XSD, и я совершенно не понимаю, когда использовать атрибут и когда использовать элемент?

Почему мы не можем указать minOccurs и maxOccurs в атрибуте?

Кроме того, почему мы не можем указать use = "required" в элементе?

Ответы [ 4 ]

27 голосов
/ 13 ноября 2009

Элемент - это элемент XML - открывающий тег, некоторый контент, закрывающий тег - они являются строительными блоками вашего XML-документа:

<test>someValue</test>

Здесь "test" будет элементом.

Атрибуты - это дополнительная информация о теге - это «дополнение» или дополнительная информация об элементе, но она никогда не может существовать одна:

<test id="5">somevalue</test>

«id» - это атрибут.

Вы не можете иметь несколько атрибутов с одним и тем же именем в одном теге -> minOccurs / maxOccurs не имеет смысла. Вы можете определить обязательные (или нет) для атрибута - все остальное не имеет смысла.

Элементы определяются их наличием внутри сложных типов - например, если у вас сложный тип с <xs:sequence> внутри - вы определяете, что все элементы должны присутствовать и должны быть в указанном порядке:

<xs:complexType name="SomeType">
   <xs:sequence>       
      <xs:element name="Element1" type="xs:string" />
      <xs:element name="Element2" type="xs:string" />
   </xs:sequence>
</xs:complexType>

Внутри элемента этого типа подэлементы «Элемент1» и «Элемент2» являются обязательными и должны появляться в этом порядке - нет необходимости в «требуется» или нет (как в случае с атрибутами). Требуется ли элемент, определяется использованием minOccurs и maxOccurs; оба = 1 по умолчанию, например элемент должен появляться и может встречаться только один раз. Изменяя эти настройки, вы можете определить элемент как необязательный (minOccurs = 0) или разрешить его отображение несколько раз (maxOccurs> 1).

Я настоятельно рекомендую вам ознакомиться с Учебным пособием W3Schools по XML-схеме и узнать больше о XML-схеме.

Марк

5 голосов
/ 03 октября 2012

Пример: формат XSD

<xs:complexType name="contactInformation">
    <xs:all>
        <xs:element name="firstName" type="xs:string" minOccurs="0"/>
        <xs:element name="workCountryId" type="xs:long" minOccurs="0"/>
    </xs:all>
    <xs:attribute name="id" type="xs:long"/>
</xs:complexType>

Формат XML

<contactInformation id=100>
    <firstname>VELU</firstname>
    <workCountryId>120</workCountryId>
</contactInformation>


attribute является необязательным по умолчанию. Чтобы указать, что атрибут обязателен, используйте атрибут use:

например. <xs:attribute name="id" type="xs:long" use="required"/>

Подробнее о атрибутах и элементах .

Элемент complexType - это элемент XML, который содержит другие элементы и / или атрибуты.

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

maxOccurs Необязательно. Определяет максимальное количество раз, которое элемент может встречаться. Значение должно быть 1.

minOccurs Необязательно. Определяет минимальное количество раз, которое элемент может встречаться. Значение может быть 0 или 1. Значение по умолчанию: 1

3 голосов
/ 13 ноября 2009

Элемент является узлом XML - и он может содержать другие узлы или атрибуты. Это может быть простой тип или сложный тип. Это сущность XML.

Атрибут является дескриптором. Он не может содержать ничего и может быть только простым типом.

Посмотрите на это . Конечно, вы можете просто гуглить что-то вроде «XML element vs attribute»

3 голосов
/ 13 ноября 2009
<element myAttribute="value">
   <subElement />
   <subElement anotherAttribute="this is an attribute's value">Element value</subElement>
</element>

В XML не может быть более одного атрибута с одним и тем же именем, поэтому вы не можете использовать minOccurs и maxOccurs для атрибутов.

Вам не нужно использовать = "required" для элементов, потому что вы можете использовать minOccurs = "1".

Это ваш выбор, когда использовать атрибуты, а когда использовать элементы. Вот некоторые рекомендации: http://www.ibm.com/developerworks/xml/library/x-eleatt.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...