Использование библиотеки Xerces SAX XSModel
в качестве представления грамматики XSD, если у меня есть сложный тип, относящийся к группе моделей, как я могу получить группу модели? Похоже, что определение сложного типа, представленное экземпляром XSModel
, предоставленное Xerces, обеспечивает доступ к сплющенному (расширенному) содержимому группы (pe элементы группы), а не к фактической группе или ссылке на определение группы (или даже имя группы; XSModelGroupImpl
getName()
-метод состоит из return null
...).XSModel: получение информации о группе моделей
1
A
ответ
5
Группы моделей очень хорошо представлены Xerces. Но вы должны использовать пакет org.apache.xerces.xs
. Группы моделей находятся в объявлениях верхнего уровня и как частицы в сложных типах.
Вот пример кода Java:
import org.apache.xerces.xs.*;
import org.apache.xerces.dom.DOMXSImplementationSourceImpl;
....
/**
* Load an XSD file
*/
void loadSchema (String xsdURI)
{
XSImplementation impl = (XSImplementation)
(new DOMXSImplementationSourceImpl()).getDOMImplementation ("XS-Loader");
XSLoader schemaLoader = impl.createXSLoader (null);
XSModel xsModel = schemaLoader.loadURI (xsdURI);
}
/**
* Process schema content
*/
private void processXSModel (XSModel xsModel)
{
XSNamedMap xsMap;
// process model group definitions
xsMap = xsModel.getComponents (XSConstants.MODEL_GROUP_DEFINITION);
for (int i = 0; i < xsMap.getLength(); i ++)
{
XSModelGroupDefinition xsGroupDef = (XSModelGroupDefinition) xsMap.item (i);
XSModelGroup xsGroup = xsGroupDef.getModelGroup();
...
}
// process top-level type definitions
xsMap = xsModel.getComponents (XSConstants.TYPE_DEFINITION);
for (int i = 0; i < xsMap.getLength(); i ++)
{
XSTypeDefinition xsTDef = (XSTypeDefinition) xsMap.item (i);
processXSTypeDef (xsTDef);
}
// process top-level element declarations
xsMap = xsModel.getComponents (XSConstants.ELEMENT_DECLARATION);
for (int i = 0; i < xsMap.getLength(); i ++)
{
XSElementDeclaration xsElementDecl = (XSElementDeclaration) xsMap.item (i);
processXSElementDecl (xsElementDecl);
}
}
/**
* Process type definition
*/
private void processXSTypeDef (XSTypeDefinition xsTDef)
{
switch (xsTDef.getTypeCategory())
{
case XSTypeDefinition.SIMPLE_TYPE:
processXSSimpleType ((XSSimpleTypeDefinition) xsTDef);
break;
case XSTypeDefinition.COMPLEX_TYPE:
XSComplexTypeDefinition xsCTDef = (XSComplexTypeDefinition) xsTDef;
// element's attributes
XSObjectList xsAttrList = xsCTDef.getAttributeUses();
for (int i = 0; i < xsAttrList.getLength(); i ++)
{
processXSAttributeUse ((XSAttributeUse) xsAttrList.item (i));
}
// element content
switch (xsCTDef.getContentType())
{
case XSComplexTypeDefinition.CONTENTTYPE_EMPTY:
break;
case XSComplexTypeDefinition.CONTENTTYPE_SIMPLE:
parseValueType (xsCTDef.getSimpleType());
break;
case XSComplexTypeDefinition.CONTENTTYPE_ELEMENT:
processXSParticle (xsCTDef.getParticle());
break;
case XSComplexTypeDefinition.CONTENTTYPE_MIXED:
...
processXSParticle (xsCTDef.getParticle());
break;
}
}
break;
}
/**
* Process particle
*/
private void processXSParticle (XSParticle xsParticle)
{
XSTerm xsTerm = xsParticle.getTerm();
switch (xsTerm.getType())
{
case XSConstants.ELEMENT_DECLARATION:
processXSElementDecl ((XSElementDeclaration) xsTerm);
break;
case XSConstants.MODEL_GROUP:
// this is one of the globally defined groups
// (found in top-level declarations)
XSModelGroup xsGroup = (XSModelGroup) xsTerm;
// it also consists of particles
XSObjectList xsParticleList = xsGroup.getParticles();
for (int i = 0; i < xsParticleList.getLength(); i ++)
{
processXSParticle ((XSParticle) xsParticleList.item (i));
}
...
break;
case XSConstants.WILDCARD:
...
break;
}
}
Смежные вопросы
- 1. InfoPath Получение информации о группе SharePoint
- 2. Получение информации о группе Azure AD с помощью JWT
- 3. Получение информации о сервере
- 4. Получение информации о пользователе
- 5. Получение информации о странице
- 6. Получение информации о полете
- 7. Получение информации о антивирусе
- 8. Получение информации о Facebook
- 9. Построение на основе информации о группе
- 10. Uploadcare: Ошибка получения информации о группе файлов
- 11. Получение информации о моих пользователях
- 12. Получение информации о сети WiFi
- 13. Получение информации о песне Pandora
- 14. Получение информации о вложенных данных
- 15. Получение информации о разделе памяти
- 16. Получение информации о тревогах Android
- 17. Получение информации о геометрии диска
- 18. Получение информации о конкретном task_id
- 19. Получение информации о Facebook Facebook
- 20. Получение информации о загруженных файлах
- 21. Silverlight - Получение информации о домене
- 22. Drupal: получение информации о пользователе
- 23. Получение информации о брендинге приложения
- 24. Получение информации о системном прокси
- 25. Databasemetadata получение информации о столбце
- 26. Получение информации о зарегистрированных пользователях
- 27. Программный получение информации о сертификате
- 28. Получение информации о определенном месте?
- 29. Получение информации о классе друзей?
- 30. Получение информации о пользователе GoogleDrive