Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Schemat XML - atrybut i wartość elementu na raz
Forum PHP.pl > Forum > XML, AJAX > XML
torbicki65
Mam taki problem, mam przykładowy kawałek danych w XML:

  1. <cena waluta="PLN">15</cena>


i chcę dla niego stworzyć schemat XML (na wbudowanych typach).

Kiedy probuję czegoś takiego

  1. <xsd:element name="cena" type="xsd:integer">
  2. <xsd:complexType>
  3. <xsd:attribute name="waluta"/>
  4. </xsd:complexType>
  5. </xsd:element>


to walidator wyrzuca mi błąd, że complexType i type wykluczają się jednocześnie. Jedyne co mi działa, to forma, kiedy usunę type="xsd:integer", ale wtedy nie mogę mieć żadnej wartości (w przykładzie tych "15"). Jedyne co udało mi się wymyśleć, to zastosowanie elementu w środku, w stylu:

  1. <cena waluta="PLN">
  2. <kwota>15</kwota>
  3. </cena>


Ale chciałbym się dowiedzieć jak powinien wyglądać schemat dla tego pierwszego przykładu.
Crozin
Dawno się tym nie bawiłem, ale chyba coś takiego powinno się sprawdzić.
  1. <xsd:element name="cena" type="xsd:integer">
  2. <xsd:attribute name="waluta" type="xsd:string" use="required" />
  3. </xsd>
torbicki65
Niestety, wtedy wyrzuca błąd:
The content is not valid. Expected is (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*)).

Nie chce mi się wierzyć, że się nie da :/ Ale w żadnych materiałach dydaktycznych, które znalazłem, nie ma tego przykładu. Jak na złość.
wmatusiak
Witam
Jako że to pierwszy post to witam wszystkich.
A teraz do rzeczy wink.gif

  1. <xsd:element name="cena">
  2. <xsd:complexType>
  3. <xsd:simpleContent>
  4. <xsd:extendsion base="xsd:integer">
  5. <xsd:attribute name="waluta" type="xsd:string" />
  6. </xsd:extendsion>
  7. </xsd:simpleContent>
  8. </xsd:complexType>
  9. </xsd:element>


PS. Na tym kompie niemam parsera ani żadnego porządnego edytora XML więc może zawierać błędy ale idea powinn być ok wink.gif
torbicki65
Niestety ni w ząb nie chce działać, zapytam jutro ćwiczeniowca i napiszę, może ktoś kiedyś też będzie miał ten problem.
wmatusiak
Literówka była w słowie extension wink.gif
XSD
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  3. <xs:element name="root">
  4. <xs:complexType>
  5. <xs:sequence>
  6. <xs:element name="cena" maxOccurs="unbounded" minOccurs="1">
  7. <xs:complexType>
  8. <xs:simpleContent>
  9. <xs:extension base="xs:integer">
  10. <xs:attribute name="waluta" type="xs:string" use="required" />
  11. </xs:extension>
  12. </xs:simpleContent>
  13. </xs:complexType>
  14. </xs:element>
  15. </xs:sequence>
  16. </xs:complexType>
  17. </xs:element>
  18. </xs:schema>

XML
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="tmp.xsd">
  3. <cena waluta="PLN">29</cena>
  4. </root>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.