XSD a „dědičnost“ minInclusive, maxInclusive

XSD a „dědičnost“ minInclusive, maxInclusive
« kdy: 03. 01. 2022, 14:44:15 »
Ahoj,
mam v XSD typ NumericWeekdayT s restriction minInclusive a maxInclusive. Z nej mam extended type WeekdayT. U toho bych ale chtel mit jiny hodnoty pro minInclusive a maxInclusive. Jakpak se to da udelat?

Mam tady takovej navrh, jak by to mohlo fungovat, ale nefunguje. Nejaky navrh?

Kód: [Vybrat]
<?xml version="1.0" encoding="UTF-8" ?>

<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="NumericWeekdayT">
    <xs:restriction base="xs:int">
        <xs:minInclusive value="1"/>
        <xs:maxInclusive value="7"/>
    </xs:restriction>
</xs:simpleType>

<xs:complexType name="WeekdayT">
    <xs:simpleContent>
        <xs:extension base="NumericWeekdayT">
           <xs:minInclusive value="0"/>
           <xs:maxInclusive value="6"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>


<xs:complexType name="rootT">
  <xs:sequence>
    <xs:element name="NumericWeekday" type="NumericWeekdayT" minOccurs="1" maxOccurs="unbounded"/>
    <xs:element name="Weekday" type="WeekdayT" minOccurs="1" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:element name="root" type="rootT"/>

</xs:schema>
« Poslední změna: 03. 01. 2022, 17:26:21 od Petr Krčmář »


Re:XSD a "dedicnost" minInclusive, maxInclusive
« Odpověď #1 kdy: 03. 01. 2022, 15:17:41 »
Ahoj,
mam v XSD typ NumericWeekdayT s restriction minInclusive a maxInclusive. Z nej mam extended type WeekdayT. U toho bych ale chtel mit jiny hodnoty pro minInclusive a maxInclusive. Jakpak se to da udelat?

Pomocí restriction se to odvodit nedá, protože tím říkáte, že na odvozený prvek platí stejná omezení, jako na rodičovský, plus případně nějaká další. Vy ale chcete navíc povolit i hodnotu 0, která v rodičovském prvku povolená není.

Napadá mne jenom jinak uspořádat tu hierarchii – vytvořit jeden rodičovský typ, na který nastavíte nějaká společná omezení, a od něj pak oddědit NumericWeekdayT a WeekdayT.

Re:XSD a "dedicnost" minInclusive, maxInclusive
« Odpověď #2 kdy: 03. 01. 2022, 15:28:10 »
Dekuju, mate pravdu. Sice jsem se s tim nejakou dobu trapil, ale docvaklo mi to jak jsem to napsal. Takze neco jako toto uz funguje. Ale porad se musim zamyslet, jestli to takhle vlastne chci.

Kdyz jsme tak u toho, mate doporuceni na dokument o XSD?

Kód: [Vybrat]
<xs:simpleType name="NumericBase">
    <xs:restriction base="xs:int">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="255"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="week">
    <xs:restriction base="NumericBase">
        <xs:minInclusive value="1"/>
        <xs:maxInclusive value="7"/>
    </xs:restriction>
</xs:simpleType>


<xs:simpleType name="NumericWeekdayT">
    <xs:restriction base="NumericBase">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="6"/>
    </xs:restriction>
</xs:simpleType>

Re:XSD a "dedicnost" minInclusive, maxInclusive
« Odpověď #3 kdy: 03. 01. 2022, 15:50:33 »
To bylo první, co mne napadlo – proč to tak vlastně chcete. Odvozování typů se v XML schématu používá pro jednodušší vytvoření a správu schématu (abyste se nemusel opakovat), nevyjadřuje to nic o vztahu objektů ve schématu. Napadá mne jako příklad, že chcete mít možnost někde zadat den v týdnu v rozsahu 0–6 nebo v rozsahu 1–7. To by se ale v XML schématu nevyjadřovalo pomocí odvozování typů, ale pomocí elementu choice, ve kterém by bylo na výběr z těch dvou typů.

Základy XSD se dají načíst u Jirky Koska: XML schémata. Nic, co by šlo víc do hloubky, ale neznám – ani v angličtině. Pak už je potřeba jít přímo do specifikace, kde ale většinou chybí „proč“, takže je to na studium dost obtížné.