Автор Тема: проблем с xml namespace при xsd файл  (Прочетена 1665 пъти)

Nikolavp

  • Напреднали
  • *****
  • Публикации: 408
    • Профил
    • WWW
Здравейте опитвам се да напиша 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-а ще му бъда много благодарен.
Благодаря предварително!!!



Активен

http://blog-nikolavp.rhcloud.com - простотиите, с които се занимавам в свободното време

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
проблем с xml namespace при xsd файл
« Отговор #1 -: Aug 28, 2007, 13:42 »
За схемата не трябва ли да е:
<xs:element name="blabla">
<xs:complexType>  ... ?

Цитат
...да ми каже как да декларирам execute namespace-а ...

Сигурно това се иска '<img'> :
<program xmlns:execute="http://www.einit.org/">...
Активен

Nikolavp

  • Напреднали
  • *****
  • Публикации: 408
    • Профил
    • WWW
проблем с xml namespace при xsd файл
« Отговор #2 -: Aug 28, 2007, 19:05 »
hmm и аз така мислех, че ще проработи, но ето ги примерите да не говоря на изуст '<img'> и да видиш за какво става въпрос:
Това е 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




Активен

http://blog-nikolavp.rhcloud.com - простотиите, с които се занимавам в свободното време

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
проблем с xml namespace при xsd файл
« Отговор #3 -: 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.
Активен

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
проблем с xml namespace при xsd файл
« Отговор #4 -: 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
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
centos php 5.2 + namespace
Настройка на програми
veroun 23 4144 Последна публикация Apr 07, 2011, 21:34
от veroun