Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions mephi.dtd
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!ELEMENT mephi (fakultet+)>
<!ELEMENT fakultet (kafedra+)>
<!ELEMENT kafedra (grop+)>
<!ELEMENT grop (student+)>
<!ELEMENT student ANY>
<!ATTLIST mephi adress CDATA "Kashirskaia 31">
<!ATTLIST fakultet fak CDATA "kib">
<!ATTLIST kafedra kaf CDATA "36">
<!ATTLIST grop gr CDATA #REQUIRED>
<!ATTLIST grop year CDATA #REQUIRED>
<!ATTLIST student N CDATA #REQUIRED>
<!ATTLIST student Name CDATA #REQUIRED>

21 changes: 21 additions & 0 deletions mephi.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="p1.xsl"?>
<!DOCTYPE mephi SYSTEM "mephi.dtd">
<mephi xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://mephi.xsd" adress = "Kashirskaia 31"><fakultet fak="kib"><kafedra kaf ="36"><grop gr ="361" year = "2012">
<student N="1" Name ="Anisimova">Anisimova-Nataly</student>
<student N="2" Name ="Artemev">Artemev-Dmitriy </student>
<student N="3" Name ="Jelouhova">Jelouhova-Kiril</student>
<student N="4" Name ="Jelouhova">Jelouhova-Alena</student>
<student N="5" Name ="Zamanov">Zamanov-Ainur</student>
<student N="6" Name ="Miheev">Miheev-Denis</student>
<student N="7" Name ="Pivovarov">Pivovarov-Alexandr</student>
<student N="8" Name ="Samsonov">Samsonov-Artem</student>
<student N="9" Name ="Soloveva">Soloveva-Anna</student>
<student N="10" Name ="Sidorova">Sidorova-Lubov</student>
<student N="11" Name ="Tarmazakov">Tarmazakov-Evgeniy</student>
<student N="12" Name ="Titorenko">Titorenko-Aleksey</student>
<student N="13" Name ="Shtanko">Shtanko-Alexandr</student>
</grop><grop gr = "362" year = "2012">
<student N="1" Name ="hjk">kj</student>
</grop></kafedra></fakultet><fakultet fak="a"/><fakultet fak="t"/><fakultet fak="f"/><fakultet fak="v"/><fakultet fak="u"/></mephi>

53 changes: 53 additions & 0 deletions mephi.xsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="mephi" type="u"/>
<xs:complexType name="u">
<xs:sequence>
<xs:element name="fakultet" type="f" maxOccurs="10" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="adress" type="xs:string"/>
</xs:complexType>

<xs:complexType name="f">
<xs:sequence>
<xs:element name="kafedra" type="k" maxOccurs="10" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="fak">
</xs:attribute>
</xs:complexType>
<xs:complexType name="k">
<xs:sequence>
<xs:element name="grop" type="g" maxOccurs="10" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="kaf">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>


</xs:complexType>
<xs:complexType name="g">
<xs:sequence>
<xs:element name="student" type="s" maxOccurs="30" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="year" type="xs:integer"/>
<xs:attribute name="gr" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="s">
<xs:simpleContent>
<xs:extension base="person">
<xs:attribute name="N" type="xs:positiveInteger" use="required"/>
<xs:attribute name="Name" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="human" type="person"/>
<xs:simpleType name="person">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
</xs:schema>

18 changes: 18 additions & 0 deletions print
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#! /usr/bin/env python
import sys, libxml2
def open(xml_file):
doc = libxml2.parseFile(xml_file)
root = doc.getRootElement()
child = root.children
child = child.children
child = child.children
child = child.children
while child.next is not None :
print child.content
child =child.next
def main(argv):
if len(argv) != 2:
sys.stderr.write("Usage : %s xml_file" % (argv[0],))
else: open(argv[1])
if __name__ == '__main__': main(sys.argv)

23 changes: 23 additions & 0 deletions valid
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import optparse
import sys, libxml2
def validate(xml_file, dtd_file):
doc = libxml2.parseFile(xml_file)
dtd = libxml2.parseDTD(None, dtd_file)
ctxt = libxml2.newValidCtxt()
ret = doc.validateDtd(ctxt, dtd)
dtd.freeDtd()
doc.freeDoc()
return ret

def main():
op = optparse.OptionParser(description = U"Проверка на соответствие DTD", prog="dtd", version="0.1", usage=U"%prog")
op.add_option("-x", "--xml", dest="xml", help=U"XML документ", metavar="XML_FILE")
op.add_option("-d", "--dtd", dest="dtd", help=U"DTD документ", metavar="DTD_FILE")
options, arguments = op.parse_args()
if options.xml and options.dtd:
validate(options.xml, options.dtd)
else:
op.print_help()
if __name__ == '__main__': main()
28 changes: 28 additions & 0 deletions valid1
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import optparse
import sys, libxml2
def schema_validate(xml_file, xsd_file):
ctxt = libxml2.schemaNewParserCtxt(xsd_file)
schema = ctxt.schemaParse()
validationCtxt = schema.schemaNewValidCtxt()
res = validationCtxt.schemaValidateFile(xml_file, 0)
#doc = libxml2.parseFile(xml_file)
#res = validationCtxt.schemaValidateDoc(doc)
#doc.freeDoc()
if res != 0:
print "VALIDATION FAILED"
else:
print "VALIDATED"
return res

def main():
op = optparse.OptionParser(description = U"Проверка на соответствие XSD", prog="xsd", version="0.1", usage=U"%prog")
op.add_option("-x", "--xml", dest="xml", help=U"XML документ", metavar="XML_FILE")
op.add_option("-s", "--xsd", dest="xsd", help=U"XSD документ", metavar="XSD_FILE")
options, arguments = op.parse_args()
if options.xml and options.xsd:
schema_validate(options.xml, options.xsd)
else:
op.print_help()
if __name__ == '__main__': main()
70 changes: 70 additions & 0 deletions xpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#! /usr/bin/env python
import sys, libxml2
def open(xml_file):
doc = libxml2.parseFile (xml_file)
ctxt = doc.xpathNewContext()
# 1
fak = ctxt.xpathEval("//fakultet[@fak='kib']/child::*")
print "1"
i=0;
for element in fak:
print fak[i].properties.content
i=i+1
# 2
stud = ctxt.xpathEval("//grop[@year>2010]/child::*")
print "2"
i=0;
for element in stud:
print stud[i].content
i=i+1
# 3 & 8
grop = ctxt.xpathEval("//student[@Name='Anisimova']/parent::*")
print "3&8"
i=0
for element in grop:
for property in grop[i].properties:
print property
i=i+1
# 4
stud = ctxt.xpathEval("//grop[@year=2012 and @gr=361]/child::*")
i=0;
for element in stud:
i=i+1
print "4"
print i

#5
st = ctxt.xpathEval("//kafedra[@kaf=36]/grop/child::*")
i=0;
for element in st:
i=i+1
print "5"
print i

#6????
fak = ctxt.xpathEval("//fakultet[@fak=kib]/kafedra/grop/child::*")
i=0
for element in fak:
i=i+1
print "6"
print i

#7
fak = ctxt.xpathEval("//kafedra[@kaf=36]/ancestor::fakultet")
print "7"
print fak[0].properties

ctxt.xpathFreeContext ()
doc.freeDoc ()


ctxt.xpathFreeContext ()
doc.freeDoc ()



def main(argv):
if len(argv) != 2:
sys.stderr.write("Usage : %s xml_file" % (argv[0],))
else: open(argv[1])
if __name__ == '__main__': main(sys.argv)