Oprettet lør. d. 28. oktober 2006 kl. 21:14:22

xguy
xguy (13.745 point. Point ude: 45)

Hjælp til XML Schema - namespace-forvirring

Hej,

Jeg er i færd med at lave mig en RSS-reader, og i den forbindelse vil jeg lave en schema til at validere feeds med inden jeg begynder at arbejde med dem.

Nu er jeg så gået lidt i stå når det kommer til namespaces.
Jeg har lagt mærke til at nogle RSS 2.0 feeds har namespaces som sy, feedburner og selvfølgelig dc.

Jeg vil gerne have et "løst" schema, sådan de mest almindelige ukorrektheder folk laver i feeds ikke er en hindring.

Fx. skal det ikke betyde noget om man har brugt <dc:language> eller <language>.

Kan man få schema'et til at være ligeglad med namespaces?
Hvis ikke, hvordan gør jeg brug af namespaces i mit schema?

Mit schema:
-----------

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/ (...) elementFormDefault="qualified" attributeFormDefault="unqualified">
   
    <xs:element name="rss">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="channel" type="channelType" />
            </xs:sequence>
            <xs:attribute name="version" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>

    <xs:complexType name="channelType">
        <xs:sequence>
            <xs:element name="title" type="xs:string" />
            <xs:element name="link" type="xs:string" />
            <xs:element name="description" type="xs:string" />
            <xs:element name="language" type="xs:string" minOccurs="0" />
            <xs:element name="creator" type="xs:string" minOccurs="0" />
            <xs:element name="copyright" type="xs:string" minOccurs="0" />
            <xs:element name="managingEditor" type="xs:string" minOccurs="0" />
            <xs:element name="webMaster" type="xs:string" minOccurs="0" />
            <xs:element name="pubDate" type="xs:string" minOccurs="0" />
            <xs:element name="lastBuildDate" type="xs:string" minOccurs="0" />
            <xs:element name="category" type="xs:string" minOccurs="0" />
            <xs:element name="generator" type="xs:string" minOccurs="0" />
            <xs:element name="docs" type="xs:string" minOccurs="0" />
            <xs:element name="cloud" type="cloudType" minOccurs="0" />
            <xs:element name="ttl" type="xs:int" minOccurs="0" />
            <xs:element name="image" type="imageType" minOccurs="0" />
            <xs:element name="rating" type="xs:string" minOccurs="0" />
            <xs:element name="textInput" type="textInputType" minOccurs="0" />
            <xs:element name="skipHours" type="skipHoursType" minOccurs="0" />
            <xs:element name="skipDays" type="skipDaysType" minOccurs="0" />
            <xs:element name="item" type="itemType" maxOccurs="unbounded" />
            <xs:any namespace="##other" processContents="skip" minOccurs="0" />
        </xs:sequence>

    </xs:complexType>

    <xs:complexType name="itemType">
        <xs:all>
            <xs:element name="title" type="xs:string" minOccurs="0" />
            <xs:element name="link" type="xs:string" minOccurs="0" />
            <xs:element name="description" type="xs:string" minOccurs="0" />
            <xs:element name="author" type="xs:string" minOccurs="0" />
            <xs:element name="category" type="categoryType" minOccurs="0" />
            <xs:element name="comments" type="xs:string" minOccurs="0" />
            <xs:element name="enclosure" type="enclosureType" minOccurs="0" />
            <xs:element name="guid" type="guidType" minOccurs="0" />
            <xs:element name="pubDate" type="xs:string" minOccurs="0" />
            <xs:element name="source" type="sourceType" minOccurs="0" />
        </xs:all>
    </xs:complexType>

    <xs:complexType name="cloudType">
        <xs:attribute name="domain" />
        <xs:attribute name="port" />
        <xs:attribute name="path" />
        <xs:attribute name="registerProcedure" />
        <xs:attribute name="protocol">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="xml-rpc" />
                    <xs:enumeration value="soap" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="imageType">
        <xs:all>
            <xs:element name="url">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="title" type="xs:string" minOccurs="0" />
            <xs:element name="link" type="xs:string" minOccurs="0" />
            <xs:element name="width" type="xs:int" minOccurs="0" />
            <xs:element name="height" type="xs:int" minOccurs="0" />
            <xs:element name="description" type="xs:string" minOccurs="0" />
        </xs:all>
    </xs:complexType>

    <xs:complexType name="textInputType">
        <xs:all>
            <xs:element name="title" type="xs:string" minOccurs="0" />
            <xs:element name="description" type="xs:string" minOccurs="0" />
            <xs:element name="name" type="xs:string" minOccurs="0" />
            <xs:element name="link" type="xs:string" minOccurs="0" />
        </xs:all>
    </xs:complexType>

    <xs:complexType name="skipHoursType">
        <xs:sequence>
            <xs:element name="hour" type="xs:int" minOccurs="0" maxOccurs="24" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="skipDaysType">
        <xs:sequence>
            <xs:element name="day" minOccurs="0" maxOccurs="7">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Monday" />
                        <xs:enumeration value="Tuesday" />
                        <xs:enumeration value="Wednesday" />
                        <xs:enumeration value="Thursday" />
                        <xs:enumeration value="Friday" />
                        <xs:enumeration value="Saturday" />
                        <xs:enumeration value="Sunday" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="sourceType">
        <xs:attribute name="url" use="required" />
    </xs:complexType>

    <xs:complexType name="enclosureType">
        <xs:attribute name="url" use="required" />
        <xs:attribute name="length" use="optional" />
        <xs:attribute name="type" use="optional" />
    </xs:complexType>

    <xs:complexType name="categoryType">
        <xs:attribute name="domain" type="xs:string" />
    </xs:complexType>

    <xs:complexType name="guidType">
        <xs:attribute name="isPermaLink" type="xs:boolean" />
    </xs:complexType>

</xs:schema>


Jeg støder fx på denne fejl:

Line 2: The element 'channel' has invalid child element 'language' in namespace 'http://purl.org/ (...) List of possible elements expected: 'language, creator, copyright, managingEditor, webMaster, pubDate, lastBuildDate, category, generator, docs, cloud, ttl, image, rating, textInput, skipHours, skipDays, item'.


... når jeg forsøger at validere dette feed mod mit schema:
http://weblogs.asp.net/ (...)

Skrevet man. d. 30. oktober 2006 kl. 10:07:27| #1

janegil
janegil (20.557 point)
Godt spørsmål.

Det er ikke sikkert at hverken XML skjema (eller DTD) er rette verktøyet til slapp validering. Jeg tror du skulle set litt på Relax NG, se xhtml-eksempel på http://relaxed.vse.cz/ (...)

Skrevet fre. d. 03. november 2006 kl. 12:48:06| #2

xguy
xguy (13.745 point)
Okay, det ser interessant ud. Det er vist lige det jeg skal bruge.

Smid et svar :)

Skrevet fre. d. 03. november 2006 kl. 14:39:19| #3


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Hjemmeside baseret på XML i asp.net

Oprettet den 25. maj 2012 kl. 21.43
micker giver 60 point for svar | Giv et svar »

WSDL til DMR(skat) lave tilgang fra php.

Oprettet den 3. april 2012 kl. 13.49
Felix_2000 giver 100 point for svar | Giv et svar »

Hent tag name i XML via ASP

Oprettet den 20. marts 2012 kl. 11.55
superior giver 120 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger