Титла: проблем с xml namespace при xsd файл
Публикувано от: Nikolavp в Aug 26, 2007, 21:08
Здравейте опитвам се да напиша xsd(schema файл) за група от xml файлове. Всичко вървеше перфектно до момента, в който трябваше да накарам няколкото от тях да станат валидни(2-3). Проблема е, че някои атрибути в таговете са от друг namespace и не знам как трябва да ги декларирам в директивата на техния таг. Примерен код | <xs:complexType name="blabla" > </xs:complexType> | . Пример: Да кажем, че имам xml файла:
Примерен код | <?xml version="1.0" encoding="utf-8" xmlns:execute="http://www.einit.org/" ?> <program> <editor execute:open="openfile:opendirectory" save="savefile:savedirectory" /> </program> |
Някой ако може, да ми каже как да декларирам execute namespace-а ще му бъда много благодарен. Благодаря предварително!!!
Титла: проблем с xml namespace при xsd файл
Публикувано от: rpetrov в Aug 28, 2007, 13:42
За схемата не трябва ли да е: <xs:element name="blabla"> <xs:complexType> ... ? Цитат | ...да ми каже как да декларирам execute namespace-а ... |
Сигурно това се иска : <program xmlns:execute="http://www.einit.org/">...
Титла: проблем с xml namespace при xsd файл
Публикувано от: Nikolavp в Aug 28, 2007, 19:05
hmm и аз така мислех, че ще проработи, но ето ги примерите да не говоря на изуст и да видиш за какво става въпрос: Това е xml файла Примерен код | <einit prefix="services-virtual-module" xmlns:execute="http://www.einit.org/"> <shell id="shell-postfix" name="postfix" uid="postfix" provides="mta:postfix" requires="network:mount-critical" enable="/usr/sbin/postfix start" disable="/usr/sbin/postfix stop" execute:reload="/usr/sbin/postfix reload" /> </einit>
|
Примерен код | <?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:execute="http://www.einit.org/"> <xs:attributeGroup name="module"> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="provides" type="xs:string" use="required" /> <xs:attribute name="requires" /> <xs:attribute name="need-files" /> <xs:attribute name="pid" /> <xs:attribute name="id" use="required" /> <xs:attribute name="restart" /> <xs:attribute name="variable" /> <xs:attribute name="options" /> <xs:attribute name="variables" /> <xs:attribute name="after" /> <xs:attribute name="prepare" /> <xs:attribute name="HOME" /> <xs:attribute name="DISPLAY" /> <xs:attribute name="before" /> <xs:attribute name="gid" /> <xs:attribute name="cleanup" /> <xs:attribute name="uid" /> <xs:attribute name="reload" /> <xs:attribute name="on-shutdown" /> </xs:attributeGroup> <xs:complexType name="shell"> <xs:attributeGroup ref="module" /> <xs:attribute name="disable" type="xs:string" /> <xs:attribute name="enable" type="xs:string" /> </xs:complexType> <xs:element name="einit"> <xs:complexType> <xs:choice> <xs:element name="daemon" type="daemon" /> <xs:element name="shell" type="shell" /> <xs:element name="ifctl" type="network" /> <xs:element name="ip" type="network" /> <xs:element name="misc" type="network" /> </xs:choice> <xs:attribute name="prefix" type="module_prefix" /> </xs:complexType> </xs:element> </xs:schema> | Пропуснах част от xsd файла, за да не стане много голям коментара. Та при тази ситуация ето какво ми дава xmllint:
Примерен код | ../einit/modules/xml/data/modules-xml/postfix.xml:10: element shell: Schemas validity error : Element 'shell', attribute '{http://www.einit.org/}reload': The attribute '{http://www.einit.org/}reload' is not allowed. ../einit/modules/xml/data/modules-xml/postfix.xml fails to validate |
Титла: проблем с xml namespace при xsd файл
Публикувано от: rpetrov в Aug 29, 2007, 15:20
Ей че сложна работа.
Чудя се, дали не трябваше, вместо name, да се използва ref="execute:reload". Tова ще изисква дефиниране на import namespace <xs:import namespace="http://www.einit.org/" schemaLocation=".....<path to file..." /> и във този xsd-файл да се опише attributе reload.
Титла: проблем с xml namespace при xsd файл
Публикувано от: rpetrov в Aug 30, 2007, 18:01
Цитат (rpetrov @ Авг. 29 2007,15:20) | Ей че сложна работа.
Чудя се, дали не трябваше, вместо name, да се използва ref="execute:reload". Tова ще изисква дефиниране на import namespace <xs:import namespace="http://www.einit.org/" schemaLocation=".....<path to file..." /> и във този xsd-файл да се опише attributе reload. |
тествах това:
Примерен код | $ cat sample.xml <?xml version="1.0" encoding="UTF-8"?> <!-- einit prefix="services-virtual-module" xmlns:execute="http://www.einit.org/" --> <einit xmlns:execute="http://www.einit.org/"> <shell execute:reload="/usr/sbin/postfix reload" /> </einit> |
Примерен код | $ cat sample.imp <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.einit.org/" xmlns="http://www.einit.org/">
<xs:attribute name="reload" type="xs:string" /> </xs:schema> |
Примерен код | $ cat sample.xsd <?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:execute="http://www.einit.org/" >
<xs:import namespace="http://www.einit.org/" schemaLocation="sample.imp" />
<xs:attributeGroup name="module"> <xs:attribute ref="execute:reload" /> </xs:attributeGroup>
<xs:complexType name="shell"> <xs:attributeGroup ref="module" /> <xs:attribute name="disable" type="xs:string" /> <xs:attribute name="enable" type="xs:string" /> </xs:complexType>
<xs:element name="einit"> <xs:complexType> <xs:choice> <xs:element name="shell" type="shell" /> </xs:choice> <!-- xs:attribute name="prefix" type="module_prefix" / --> </xs:complexType> </xs:element> </xs:schema> |
и се получи товаЦитат | $ xmllint --schema sample.xsd sample.xml <?xml version="1.0" encoding="UTF-8"?> <!-- einit prefix="services-virtual-module" xmlns:execute="http://www.einit.org/" --> <einit xmlns:execute="http://www.einit.org/"> <shell execute:reload="/usr/sbin/postfix reload"/> </einit> sample.xml validates |
|