Προς το περιεχόμενο

XML , DTD's γενικα


fonsde

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα,

 

 

Θα ηθελα καποια παραδειγματα εφαρμογων οπου τα XML δεν χρειαζεται να ειναι valid με καποιο DTD και γιατι.

 

 

επισης εχω μια εργασια οπου

 

DTDs do not have an XML based syntax, which makes their manipulation by XML tools difficult. In this assignment, you will create an XML format (called "DTD/XML") for a subset of the DTD formalism. The root element of your format is named dtdx. The children of your root element are element declarations, attribute declarations, or comments, roughly following the markupdecl production

 

markupdecl ::= elementdecl | AttlistDecl | Comment

 

design a XML based format (DTD/XML) for DTDs consisting of element declarations, attribute declarations, and comments

 

μου δινει ενα DTD και πρεπει να φτιαξω ενα XML,

 

 

απλα δεν εχω καταλαβει τι ακριβως πρεπει να κανω? αν καποιος καταλαβαινει ας μου πει για να ξεκινησω

 

 

ευχαριστω

Δημοσ.
<?xml version="1.0" encoding="UTF-8"?>

<!-- This is a simple format for excoding arithmetic

expressions on integers. The operations in question

are +, -, and *. The output is always an integer.

 

This DTD was written by Bijan Parsia in 2010 and is put into

the public domain.

 

This is also used in the SAXCalc assignment. -->

 

<!-- Notice the level of commenting! -->

 

<!-- This is my intended root element. -->

<!ELEMENT expression (plus | times | minus | int )>

 

<!-- plus and times are n-ary, where n is greater or equal to

than 2. Note that it's very important that the

repetition operator is *inside* the parenthesis! (Why?)-->

<!ELEMENT plus ((plus | times | minus | int ), (plus | times | minus | int )+)>

<!ELEMENT times ((plus | times | minus | int ), (plus | times | minus | int )+)>

 

<!-- Note that minus is a *binary* operation -->

<!ELEMENT minus ((plus | times | minus | int ), (plus | times | minus | int ))>

 

<!-- Ints are empty elements. I use an attribute

for the value. There's no special reason

for this other than I can put an *inadequate*

type constraint on it. It's not even shorter, viz.:

<int>576</int>

<int value="572"/>-->

<!ELEMENT int EMPTY>

<!ATTLIST int value NMTOKEN #REQUIRED>

 

δινει αυτο και θελει ενα xml

Δημοσ.

Αν αφαιρέσεις τα σχόλια το DTD που μένει είναι αυτό :

>
<!ELEMENT expression (plus | times | minus | int )>
<!ELEMENT plus ((plus | times | minus | int ), (plus | times | minus | int )+)>
<!ELEMENT times ((plus | times | minus | int ), (plus | times | minus | int )+)>
<!ELEMENT minus ((plus | times | minus | int ), (plus | times | minus | int ))>
<!ELEMENT int EMPTY>
<!ATTLIST int value NMTOKEN #REQUIRED>

 

Το οποίο είναι σχετικά απλό, η μόνη του ιδιαιτερότητα είναι μια ανακύκλωση των element επειδή κάθε element μπορεί να περιέχει και τον εαυτό του.

 

το XML αποτελείται από ένα element το expression, το οποίο μπορεί να περιέχει ένα από τα 4 πιθανά element (plus, times, minus,int )

 

κάθε ένα από αυτά τα elements μπορεί να περιέχει 2 ή περισσότερα από τα προηγούμενα element (1 φορά λόγο του πρώτου γρουπ (plus | times | minus | int ) και άλλη 1 ή περισσότερες φορές λόγο του group plus | times | minus |int )+ όπου το + αναφέρεται στο οτι η τα συκγεκριμένα element μπορούν να εμφανιστούν παραπάνω από μια φορές. )

 

Το μόνο element που φαίνεται να σταματάει τον φαύλο κύκλο είναι το int το οποίο δεν παίρνει τιμή (είναι Empty) και έχει ένα attribute το οποίο αντιπροσωπεύει την τιμή του.

 

Για να είμαι ειλικρηνής δεν κατάλαβα ακριβώς το νόημα της εργασίας ή του ίδιου του XML, πάντως από το παραπάνω DTD μπορούν να βγούν άπειρα XML, ένα παράδειγμα με τυχαίες τιμές για το attribute του int είναι το :

 

>
<?xml version="1.0" encoding="UTF-8"?>
    <expression>
         <times>
         <int value="2"/>
              <minus>
                   <plus>
                   <int value="25"/>
                        <minus>
                        <int value="45"/>
                        <int value="32"/>
                        </minus>
                   </plus>
              <int value="1"/>
              </minus>
         </times>
    </expression>

 

Το μικρότερο XML που μπορεί να παραχθεί από το DTD είναι το

>
<?xml version="1.0" encoding="UTF-8"?>
    <expression>
     <int value="5"/>
    </expression>

 

τώρα εσύ χρειάζεται να φτιάξεις πρόγραμμα το οποίο να παράγει κάποιο XML από το DTD σύμφωνα με κάποια δεδομένα από χρήστη?

Δημοσ.

δεν θελει καποιο instance, θελει να δημιουργησουμε ενα xml με πιο ωραιο syntax

 

<!ELEMENT expression (plus | times | minus | int )>

 

αυτα που υπογραμμισα τα θεωρει ασχημη syntax, πρεπει να κανουμε ενα xml που να περιγραφει το dtd "ομορφα"

 

καμια ιδεα για την 1η γραμμη?

 

ισως <element value="expression"> .... και μετα πρεπει καπως να δειξω οτι το element μπορει να περιεχει η plus η minus η int

Δημοσ.

δεν θελει καποιο instance, θελει να δημιουργησουμε ενα xml με πιο ωραιο syntax

Με το χέρι ή σαν output προγράμματος?

XML ή άλλο DTD ?

 

<!ELEMENT expression (plus | times | minus | int )>

Στο XML δεν μπορείς να έχεις παρόμοια έκφραση θα πρέπει να επιλεχθεί μόνο 1 από τα 4 στοιχεία και οποιοδήποτε από τα XML που σου παρέθεσα περιγράφουν το DTD "όμορφα", εκτώς και αν χρειάζεται να αλλάξεις και το DTD. (?) Μπερδεύτηκα, μήπως σου ζητάει να γράψεις νέο DTD ?

 

ισως <element value="expression"> .... και μετα πρεπει καπως να δειξω οτι το element μπορει να περιεχει η plus η minus η int

 

Για να γράψεις κάτι τέτοιο πρέπει το element σου να έχει attribute με όνομα value, κάτι που σύμφωνα με το DTD που έδωσες συμβαίνει μόνο για το element int.

 

για το expression θα μπορούσε να είναι κάπως έτσι

 

<!ELEMENT expression EMPTY>

<!ATTLIST expression value "(plus | times | minus | int)" #Required>

 

έχε υπόψιν σου όμως πως τα "(plus | times | minus | int)" ως τιμή attribute είναι text και δεν απευθύνονται στα ομώνυμα elements που έχουν δηλωθεί στο DTD.

 

 

Αλλά αυτό είναι νέο DTD ασύμβατο με το αρχικό.

 

Δεν καταλαβαίνω τι προσπαθεί να πει και η εκφώνηση, Πόση διορία έχεις μέχρι να την παραδώσεις ?

Δημοσ.

Αυτό που σου ζητάει είναι να φτιάξεις ένα XML format το οποίο να μπορεί να περιγράψει ένα συγκεκριμένο υποσύνολο από την πληροφορία που περιέχεται σε ένα DTD. Αυτό το format που θα φτιάξεις το ονομάζουμε όπως λέει και η εκφώνηση "DTD/XML".

 

Ο λόγος που πρέπει να είναι υποσύνολο και που δεν είναι δυνατό να φτιάξεις XML format που να μπορεί να περιγράψει ένα οποιοδήποτε DTD είναι ότι το format των DTD περιλαμβάνει productions σε BNF, ήτοι επιτρέπει να κάνεις "άπειρο" recursion στους κανόνες τις γραμματικής προκειμένου να ξεκαθαρίσεις αν η XML την οποία κάνεις validate μ' αυτό το DTD είναι όντως valid.

 

Σε αντίθεση, το υποτιθέμενο XML/DTD format είναι γραμμένο σε XML (που είναι ιεραρχική δομή χωρίς productions) το οποίο σημαίνει ότι θα έπρεπε να έχει άπειρο μέγεθος πράγμα που είναι ανέφικτο. (Εδώ τώρα δεν τα λέω όπως θα έπρεπε μαθηματικά για να είναι εύκολα κατανοητό το συμπέρασμα που θέλω να βγάλω. Απλά κράτα το "δεν γίνεται".)

 

Κατά την άποψή μου αυτό που πρέπει να κάνεις είναι:

 

1. Να καταλήξεις σε ένα schema για το DTD/XML (το οποίο schema αν θέλουμε να είμαστε ακριβείς και να μην προσπαθούμε να το περιγράψουμε με παραδείγματα θα το γράψεις ως.... wait for it: DTD). Το συγκεκριμένο DTD που περιγράφει αυτό το DTD/XML schema ας το ονομάσουμε "DTD-εργασίας".

2. Να γράψεις ένα πρόγραμμα το οποίο παίρνει ένα input που περιλαμβάνεται στο συγκεκριμένο subset of the DTD formalism (δηλαδή υποσύνολο του DTD) σε DTD/XML και αντίστροφα.

3. Από αυτό το σημείο θα έχεις τη δυνατότητα να ελέγξεις αν η XML (DTD/XML) που παράγεις είναι valid σύμφωνα με το DTD-εργασίας με οποιοδήποτε DTD validator (οπότε επιβεβαιώνεις ότι το "DTD-εργασίας" σου είναι ικανοποιητική λύση).

4. Επίσης θα ελέγξεις αν το πρόγραμμά σου κάνοντας τη μετατροπή και την αντίστροφη μετατροπή παράγει σαν έξοδο ακριβώς αυτό που πήρε σαν είσοδο (οπότε επιβεβαιώνεις και ότι η υλοποίηση που έκανες λειτουργεί σωστά).

Δημοσ.

κατι αλλο,

 

πως μπορω να βαλω το <int>576</int> <int value="572"/> μεσα στις attributs ενος xml element

 

 

π.χ. <a value=" <int>576</int> <int value="572"/>"> </a>

 

 

αυτα τα 2 κατω δεν εχουν καποια σχεση μεταξυ τους που να τα επηρεαζει

 

<!ATTLIST foo value CDATA #REQUIRED>

<!ATTLIST foo2 value CDATA #REQUIRED>

Δημοσ.

κατι αλλο,

 

πως μπορω να βαλω το <int>576</int> <int value="572"/> μεσα στις attributs ενος xml element

 

 

π.χ. <a value=" <int>576</int> <int value="572"/>"> </a>

 

 

αυτα τα 2 κατω δεν εχουν καποια σχεση μεταξυ τους που να τα επηρεαζει

 

<!ATTLIST foo value CDATA #REQUIRED>

<!ATTLIST foo2 value CDATA #REQUIRED>

 

Από ό,τι έχω καταλάβει έχεις βασικές απορείες πάνω στο XML

ρίξε μια ματιά εδώ. http://www.w3schools.com/xml/default.asp

 

Το <!ATTLIST foo value CDATA #REQUIRED> σημαίνει πως στο XML έχεις ένα element "foo" με attribute "value"

δλδ <foo value="kati"> τα δεδομένα του foo </foo.

Δημοσ.

In other words, if an attribute, att, conforms to:

<!ATTLIST ... att (a | b ) ...>

it will also conform to a declaration which is identical except for replacing type description with NMTOKENS i.e.,

<!ATTLIST ... att NMTOKENS ...>

 

 

αληθες η ψευδες?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...