Schemat XML: element z atrybutami zawierającymi tylko tekst?


136

Mam trudności ze znalezieniem tego. Jak zdefiniowałbym element w pliku schematu XML dla XML, który wygląda następująco:

<option value="test">sometext</option>

Nie mogę dowiedzieć się, jak zdefiniować element, który jest typu xs:stringi ma również atrybut.

Oto, co mam do tej pory:

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>

Odpowiedzi:


172

Próbować

  <xs:element name="option" type="AttrElement" />

  <xs:complexType name="AttrElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

Podczas wypróbowywania kodu otrzymuję następujący wyjątek - org.xml.sax.SAXParseException: src-solution: Nie można zmienić nazwy „AttrElement” na składnik (n) „definicja typu”. Dlaczego to jest takie?
Ashwin

1
Jeśli tak jest, to prawdopodobnie dlatego, że dokument schematu ma docelową przestrzeń nazw i będziesz musiał użyć nazwy z przedrostkiem, aby wskazać typ. (Jeśli prefiks tnsjest powiązany z docelową przestrzenią nazw dokumentu schematu, użyjesz type="tns:AttrElement"do odniesienia się do typu.)
CM Sperberg-McQueen

@Ashwin może być konieczne odwołanie się do typu z przestrzenią nazw typu ( type="tns:AtrElement"jeśli domyślna przestrzeń nazw XSD to xs, a nie docelowa przestrzeń nazw dokumentu. Zazwyczaj w takim przypadku tnsjest zdefiniowana i używana.
eckes

78

... lub wbudowany odpowiednik:

<xs:element name="option">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

12
Uważam, że definiowanie simpleContentw ramach a complexType. Ale z drugiej strony jest to XSD, w którym nic nie wydaje się naprawdę intuicyjne. Mimo wszystko dzięki! :-)
grypa

Spowoduje to wyświetlenie błędu w IntelliJ ( V12.1.3 ): Atrybut wartości to „niedozwolone”. Użycie complexContent zamiast simpleContent naprawiło to.
aZen

@CrBruno lepiej otwórz w tym celu dedykowane pytanie SO. Zapraszam do linku do tego tutaj w komentarzach (i wskaż na tę dyskusję)
eckes

-1

Wiem, że to nie to samo, ale działa dla mnie:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.