Требовать (разрешать) атрибут «xml: base» в XML-схеме - PullRequest
6 голосов
/ 30 апреля 2011

Учитывая документ, такой как:

<patch xmlns="http://example.com/ns/lxfs"
       xml:base="http:/example.com/publ/lxfs"
       id="http://example.com/lxfs/patches/3">

   <!-- ... -->
</patch>

Как мне написать XML-схему, чтобы требовать (или даже разрешать) наличие атрибута xml:base с фиксированным значением "http://example.com/publ/lxfs" on <patch>?

Это то, что я бы назвал "очевидным" решением, но xs:attribute[@name] предполагается для NCName:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:lxfs="http://example.com/ns/lxfs"
           xmlns:xml="http://www.w3.org/XML/1998/namespace"
           targetNamespace="http://example.com/ns/lxfs">

  <xs:element name="patch" type="lxfs:Patch" />

  <xs:complexType name="Patch">    
    <xs:attribute name="id" type="xs:anyURI" use="required" />
    <xs:attribute name="xml:base" form="qualified" fixed="http://example.com/publ/lxfs" use="required" />
  </xs:complexType>
</xs:schema>

Ответы [ 2 ]

4 голосов
/ 01 мая 2011

Измените <xs:attribute name="xml:base"> на <xs:attribute ref="xml:base"> и добавьте xs: import для схемы для пространства имен XML, которое можно найти в http://www.w3.org/2001/03/xml.xsd.(Используйте локальную копию, а не ссылку на копию на W3C

3 голосов
/ 20 апреля 2012

Просто чтобы уточнить, что Майкл уже опубликовал, чтобы обойти эту проблему, я сначала добавил эту строку в начало моей схемы:

<xs:import namespace="http://www.w3.org/XML/1998/namespace"
           schemaLocation="http://www.w3.org/2001/03/xml.xsd" />

А затем, чтобы присоединить это к элементу, просто добавьте атрибут:

<xs:attribute ref="xml:base" />

Ого, это избавило меня от многих головных болей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...