XML-схема определений simpleType

Я немного не уверен в различных примерах, которые я вижу, о том, как объявлены / определены simpleTypes. Судя по тому, что я вижу на обоих сайтах, описание синтаксиса одинаковое, но примеры отличаются.

В https://www.w3schools.com/xml/el_simpletype.asp я вижу:

<xs:element name="age">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="100"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Но в https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/ms256050(v%3Dvs.100) они используют:

<xs:simpleType name="freezeboilrangeInteger">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="100"/>
  </xs:restriction>
</xs:simpleType>

Эти два способа разные? Если да, то в чем разница? Если они одинаковы, какой из них следует использовать / лучше всего?

1 ответ

Решение

Первый пример - это xsd-элемент, который содержит определение своего типа встроенным способом.

Второй пример содержит только определение типа (xs:simpleType) без элемента, который на него ссылается. Но определение типа без ссылки на элемент или атрибут не имеет смысла.

Следовательно, чтобы оба примера были сопоставимы (с одинаковым результатом), вам нужно добавить во второй пример элемент, который ссылается на определение типа:

<xs:element name="age" type="tns:freezeboilrangeInteger"/>

<xs:simpleType name="freezeboilrangeInteger">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="100"/>
  </xs:restriction>
</xs:simpleType>

Из обоих вариантов (определение встроенного или внешнего типа) последний предпочтительнее, поскольку его можно использовать повторно.

// Обновление (из-за комментария)

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

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

    <xs:element name="agetest">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0" />
                <xs:maxInclusive value="100" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:simpleType name="freezeboilrangeInteger">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="0" />
            <xs:maxInclusive value="100" />
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="mysequence">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="age">
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:minInclusive value="0" />
                            <xs:maxInclusive value="100" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="age2" type="tns:freezeboilrangeInteger" />
                <xs:element name="age3" ref="tns:agetest" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

который генерирует следующий образец XML-результата:

<?xml version="1.0" encoding="utf-8"?>
<mysequence xmlns="mytns">
  <age>83</age>
  <age2>86</age2>
  <nsA:agetest xmlns:nsA="mytns">18</nsA:agetest>
</mysequence>
Другие вопросы по тегам