XSD: разница между элементом и атрибутом

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

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

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

Ответ 1

Элемент представляет собой элемент 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.

Марк

Ответ 2

Пример: формат 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"/>

Подробнее о attributes и элементы.

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

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

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

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

Ответ 3

<element myAttribute="value">
   <subElement />
   <subElement anotherAttribute="this is an attribute value">Element value</subElement>
</element>

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

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

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

Ответ 4

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

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

Посмотрите этот. Конечно, вы можете просто Google что-то вроде "XML-элемент с атрибутом"