---
title: "Korrekt DTD och XML-dokument"
type: "forum-thread"
url: "https://www.webforum.nu/amne/xml/123879-korrekt-dtd-och-xml-dokument"
topic: "XML"
topic_url: "https://www.webforum.nu/amne/xml"
author: "erka"
published: "2005-03-07T14:42:39.000Z"
updated: "2005-03-09T12:38:37.000Z"
replies: 5
views: 499
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/xml/123879-korrekt-dtd-och-xml-dokument"
---

# Korrekt DTD och XML-dokument

## #1 — erka, 2005-03-07T14:42Z

Eftersom jag normalt sett pillar med xmlscheman om något ska göras i xml och inte i DTD:er tänkte jag kolla om jag har hajjat DTD:er korret, har nämligen fått reda på att jag kommer få en DTD-fråga på min tenta i veckan och har inga planera på att kugga den.

Följande gäller, ska ska skapa ett xml-dokument och en dtd efter följande förhållande och exempeldata.

![](http://www.trenchcoat.se/misc/dtd.gif) 

min xml-fil (med exempeldatat)

```

<?xml version="1.0" encoding"ISO-8859-1"?>
<PERSONS>

<PERSON id="11">
<NAME>Kurt</NAME>
<ADRESS>
<NUMBER>231</NUMBER>
<STREET>Kustvägen</STREET>
</ADRESS>
<ADRESS>
<NUMBER>10</NUMBER>
<STREET>Smyggatan</STREET>
</ADRESS>
</PERSON>

<PERSON id="12">
<NAME>Olof</NAME>
<ADRESS>
<NUMBER>234</NUMBER>
<STREET>Jaktgatan</STREET>
</ADRESS>
</PERSON>

</PERSONS>
```

och min DTD

```
<!DOCTYPE PERSONS [
<!ELEMENT PERSONS(PERSON*)>
<!ELEMENT PERSON(NAME,ADRESS*)>
<!ATTLIST PERSON Id ID #REQUIRED>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT ADRESS(NUMBER,STREET)>
<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT STREET (#PCDATA)>

]>
```

Det jag är osäker på är \*, vad jag ska säga är ju att PERSONS kan innehålla många PERSON och varje PERSON kan innehålla flera ADRESS

Tacksam för all hjälp

Permalänk: https://www.webforum.nu/p/123879

## #2 — UlfT, 2005-03-07T14:55Z

Jag tycker du ser ut att ligga rätt, så som du har gjort.

\* = 0 till många
\+ = 1 till många
? = 0 till 1 (alltså valbart)

Permalänk: https://www.webforum.nu/p/1566628

## #3 — erka, 2005-03-07T19:15Z

Ok, det verkar ju lovande :) Ska vi se om mina schemakunskaper finns kvar, är detta en korrekt översättning på ett schema för det ovan

```
<xsd:schema>

  <!-- Simple elements -->
  <xsd:element name="NUMBER" type="xsd:string" />
  <xsd:element name="STREET" type="xsd:string" />
  <xsd:element name="NAME" type="xsd:string"/>

  <!-- Attributes -->
  <xsd:attribute name="Id" type="xsd:string" use="required"/>

  <!--complex elements -->
  <xsd:element name="ADRESS">
    <xsd:complexType>
      <xsd:sequence>
            <xsd:element ref="STREET"/>
            <xsd:element ref="NUMBER"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="PERSON">
    <xsd:complexType>
      <xsd:sequence>
         <xsd:element ref="NAME"/>
	 <xsd:element ref="ADRESS" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute ref="Id" use="required"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
```

Permalänk: https://www.webforum.nu/p/1566735

## #4 — UlfT, 2005-03-08T16:24Z

Jag ser en avvikelse. I din DTD anger du ADRESS med \*, vilket betyder "noll till många". Men i schemat har du utelämnat *minOccurs="0"*. Default för minOccurs är "1". Alltså har du förvandlat "0 till många" till "1 till många".

Sedan ser jag inte vart PERSONS, som ska innehålla PERSON, tog vägen.

Permalänk: https://www.webforum.nu/p/1567152

## #5 — erka, 2005-03-09T10:29Z

UlfT, visste inte att man var tvungen att ha med root-taggen i ett schema, måste missuppfattat något isåfall, hade inte heller någon aning om att minOccurs svar 1 default, ser detta mer korrekt ut då

```
<xsd:schema>

  <!-- Simple elements -->
  <xsd:element name="NUMBER" type="xsd:string" />
  <xsd:element name="STREET" type="xsd:string" />
  <xsd:element name="NAME" type="xsd:string"/>

  <!-- Attributes -->
  <xsd:attribute name="Id" type="xsd:string" use="required"/>

  <!--complex elements -->
  <xsd:element name="ADRESS">
    <xsd:complexType>
      <xsd:sequence>
            <xsd:element ref="STREET"/>
            <xsd:element ref="NUMBER"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="PERSON">
    <xsd:complexType>
      <xsd:sequence>
         <xsd:element ref="NAME"/>
	 <xsd:element ref="ADRESS" maxOccurs="unbounded"  minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute ref="Id" use="required"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="PERSONS">
    <xsd:complexType>
      <xsd:sequence>
         <xsd:element ref="PERSON" maxOccurs="unbounded"/>	
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
```

tack!

Permalänk: https://www.webforum.nu/p/1567456

## #6 — UlfT, 2005-03-09T12:38Z

> **erka skrev:**
>
> UlfT, visste inte att man var tvungen att ha med root-taggen i ett schema

Nu gör du mig osäker. Jag har alltid tagit för givet att rot-taggen måste vara med i ett schema. Jag har aldrig tidigare kollat upp den saken. Nu kollade jag lite snabbt i en bok jag har. De exempel på xml-scheman de har, innehåller rot-taggen. Men jag hittade inget om ifall det är ett krav eller ej.

Permalänk: https://www.webforum.nu/p/1567524

---

Tråden på webben: https://www.webforum.nu/amne/xml/123879-korrekt-dtd-och-xml-dokument
