XML-Schema

- Jedes Attribut muss in einem eigenen Tag definiert werden?

Ja. Wenn bestimmte Attributkombinationen häufiger auftreten, kann man sie mit<xs:attributeGroup> zusammenfassen. Dann brauchst Du nur noch die Gruppe einzufügen.

-
- Wenn ich ein leeres Element habe (in DTD EMPTY) kann ich das dann wie folgt angeben?

Code:
<xsd:complexType name="program">
		<xsd:sequnce/>
		<xsd:attribute name="name" type="xsd:string"/>
		<xsd:attribute name="os" type="xsd:string"/>
		<xsd:attribute name="version" type="xsd:string"/>
	</xsd:complexType>

Ja. Das leere Sequence-Element kannst Du weglassen. Kompliziert ist dieser Fall

XML:
<a href="www.irgendwo.de">Link zu irgendwo</a>

dann sieht der Typ so aus:
XML:
<xsd:complexType name="linkType">
  <xsd:simpleContent>
    <xsd:extension base="xs:string">
      <xsd:attribute name="href" type="xsd:anyURI"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

-


- innerhalb von Kompositionselemente (sequence, choice und all) kann ich schon weitere komplexe Datentypen definieren?

Nö. Du kannst nur innerhalb von Elementen Typen definieren. Was Du tun könntest wäre z.B. dies


XML:
<xsd:complexType name="emailType">
  <xsd:sequence>
    <xsd:element ref="to" maxOccurs="unbounded" />
    <xsd:element ref="from" />
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element ref="cc"  />
      <xsd:element ref="bcc"  />
    </xsd:choice>
    <xsd:element ref="subject" minOccurs="0" />
    <xsd:element ref="body" />
  </xsd:sequence>
</xsd:complexType>

wenn Du z.B. beliebig viele cc und bcc's in beliebiger Reihenfolge zwischen from und subject zulassen willst. Dies ist aber keine lokale Typedefinition.
 
Zuletzt bearbeitet von einem Moderator:
so würde ich das machen:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="config" type="configType"/>	
<xsd:element name="program" type="programType"/>
<xsd:element name="param" type="paramType"/>
		
	
	
<xsd:complexType name="programType">
	<xsd:attribute name="name" type="xsd:string"/>
	<xsd:attribute name="os" type="xsd:string"/>
	<xsd:attribute name="version" type="xsd:string"/>
</xsd:complexType>
	
<xsd:complexType name="paramType">
	<xsd:attribute name="name" type="xsd:string"/>
	<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType type="configType">
	<xsd:sequence>
		<xsd:element ref="program"/>
		<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


	
</xsd:schema>

Manchmal kann es sogar sinvoll sein, die Attribute global zu machen.
 
Zuletzt bearbeitet von einem Moderator:
da das Attrubut Name an verschiedenen Stellen vorkommt geht auch das:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="config" type="configType">	
<xsd:element name="program" type="programType">
<xsd:element name="param" type="paramType"/>
		
<xsd:attribute name="name" type="xsd:string"/>	
	
<xsd:complexType name="programType">
	<xsd:attribute ref="name" />
	<xsd:attribute name="os" type="xsd:string"/>
	<xsd:attribute name="version" type="xsd:string"/>
</xsd:complexType>
	
<xsd:complexType name="paramType">
	<xsd:attribute ref="name" />
	<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType type="configType">
	<xsd:sequence>
		<xsd:element ref="program"/>
		<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


	
</xsd:schema>
 
Zuletzt bearbeitet von einem Moderator:
Hi

limago ist echt nett von Dir dass du dir die Mühe gemacht und mir weitergeholfen hast!

Ich denke jetzt hab ich das auch verstanden -> aber so wie ich das im Beispiel gemacht habe würde es auch gehen -> So wie du es gemacht hast ist es sicher "sauberer" hab das nur zur als Beispiel einmal mit type und einmal mit ref gemacht


Lg Chriss
 

Neue Beiträge

Zurück