Dodanie atrybutu do schematu XSD z poziomu Javy

0

W moim programie schematy XSD są tworzone dynamicznie, problem mam taki aby dodać do nich atrybut dla danej gałęzi w pliku XML. Najprościej rzecz ujmując tworze element w pliku XML i nadaje mu nazwę w następujący sposób:

XmlSchemaElement element = new XmlSchemaElement(schema, topLevel);
element.setName(nazwa);

Schemat XSD, który zostaje utworzony wygląda tak:

<schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified">
	<element name="test">
		<complexType>
			<sequence>
				<element name="nazwa">
					<simpleType>
						<restriction base="string">
							<minLength value="1"/>
							<maxLength value="5"/>
						</restriction>
					</simpleType>
				</element>
				<element name="pole" type="string"/>
			</sequence>
		</complexType>
	</element>
</schema>

A chciałbym aby dla elementu "pole" został dodany atrybut, czyli powinno ono wyglądać mniej więcej tak:

<element name="pole">
	<attribute name="atrybutPola" type="string"/>
</element>

W jaki sposób mogę coś takiego wykonać?

0

Poszukaj w dokumentacji biblioteki której uzywasz (a o której nie napisałeś ani slowa...), niemniej jesteś pewien że to co chcesz osiągnąć jest poprawną składnią XSD?

0

Przepraszam, używam biblioteki:
import org.apache.ws.commons.schema.*;
Wydaję mi się, że jest to poprawna składania XSD, przynajmniej ja nie widzę w niej błędów.

0

Wydaje ci sie czy jesteś pewien? Bo nie chce mi sie wertować XSD do XSD (we need to go deeper :P) ale edytor XSD w IntelliJ mówi że dla tagu element nie ma takiej opcji jak tag attribute. Bo mam nadzieję że rozumiesz że XSD to nie jest dowolny XML, tylko taki ściśle określony?

0

Tak rozumiem to, ale musi być jakiś sposób na to aby dodać atrybut w XSD dla danego elementu w XML, bo przez to walidacja mi nie przechodzi.

0

Tag attribute nie może znajdować się bezpośrednio w tagu element. Musi być opakowany, z przykladow ktore zobaczylem na szybko to czesto jest opakowany w complexType itd.
Ale ja specjalista w XMLach nie jestem :)

0

Udało mi się już zrobić to o czym była mowa wcześniej, natomiast teraz mam problem z walidacją. Gdy sprawdzam poprawność XML na podstawie XSD w Notepad++ z zainstalowanym pluginem XML Tools lub w narzędziach dostępnych online to walidacja przechodzi bez żadnych problemów, wszystko jest OK. Natomiast w w kodzie wyskakuje następujący błąd:
cvc-complex-type.3.2.2: Attribute 'atrybutPola' is not allowed to appear in element 'pole'
Metoda, w której jest przeprowadzana walidacja wygląda następująco:

public static void waliduj(Source xsd, Document xml) throws SAXException {
   try {
      final Schema schema = schemaFactory.newSchema(xsd);
      final Validator validator = schema.newValidator();       

      validator.validate(new DOMSource(xml));

      } catch (final SAXException e) {
         e.printStackTrace();
         throw e;
      } 
}

Wszystko wydaje się być poprawne, klasy Scehma i Validator pochodzą z biblioteki javax. Widzicie tu jakiś błąd albo możecie wskazać mi przyczynę takiego stanu rzeczy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1